CF 189 A Cut Ribbon
简单dp。。。由于切割后没块必须是a b c中一个,所以注意状态转移时前一个状态必须是可到达的(f[i] != 0)。。。
#include<iostream> #include<cstring> using namespace std; int n, a, b, c; int f[4444]; int main() { while(cin>>n>>a>>b>>c) { memset(f, 0, sizeof(f)); f[a] = f[b] = f[c] = 1; for(int i=1; i<=n; i++) { if(i > a && f[i-a]) f[i] = max(f[i], f[i-a] + 1); if(i > b && f[i-b]) f[i] = max(f[i], f[i-b] + 1); if(i > c && f[i-c]) f[i] = max(f[i], f[i-c] + 1); } cout<<f[n]<<endl; } return 0; }
补充:软件开发 , C++ ,