#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int dp[1000005];
int solve(int n){
for(int i=1;i<=n;i++){
dp[i]=dp[i-1]+1;//用1来凑
if(i>=5){dp[i]=min(dp[i-5]+1,dp[i]);}//用1和5来凑
if(i>=7){dp[i]=min(dp[i-7]+1,dp[i]);}//用1,5,7来凑
}
return dp[n];
}
int main() {
int n;
cin>>n;
cout<<solve(n);
return 0;
}
核心状态转移是dp[i]=min(dp[i-1]+1,dp[i-5]+1,dp[i-7]+1)

京公网安备 11010502036488号