每一个状态,可以由dp[i-1] 和 dp[i-5] 和 dp[i-7]三种状态 +1 转移过来

分别枚举三种状态取最小值

答案即为最优解

#include<bits/stdc++.h>
#define int long long 

using namespace std;


const int N = 1e6+10;
const int M = 998244353;
int dp[N];

void solve()
{
	int n;
	cin>>n;
	dp[1] = 1;
	for(int i=1;i<=n;i++)
	{
		dp[i] = dp[i-1] + 1;
		if(i>=5) dp[i] = min(dp[i],dp[i-5]+1);
		if(i>=7) dp[i] = min(dp[i],dp[i-7]+1);	
	} 
	cout<<dp[n];
}



signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int _ = 1;
	// cin >> _;
	while(_--) solve();
	return 0;
}