一条绳子长度为n,可截长度为a1或a2或a3。问最多截成多少段。
裸的完全背包问题。
#include<bits/stdc++.h>
using namespace std;
int dp[4005];
int main()
{
int i,j,n,a[5];
cin>>n>>a[1]>>a[2]>>a[3];
for(i=1;i<=n;++i) dp[i]=-0x3f3f3f3f;
for(i=1;i<=3;++i)
for(j=a[i];j<=n;++j) dp[j]=max(dp[j],dp[j-a[i]]+1);
cout<<dp[n]<<endl;
return 0;
}