题目
原题链接:A. Cut Ribbon
题意
有一条长为n的丝带,只能剪成a,b或者c长度,问最多能剪多少段。开始以为模拟可解,最后参考别人的完全背包。
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,s[3],dp[4400];
scanf("%d%d%d%d",&n,&s[0],&s[1],&s[2]);
memset(dp,-1,sizeof(dp));
dp[0]=0;
for(int i=0; i<3; i++) {
for(int j=s[i]; j<=n; j++) {
if(dp[j-s[i]]!=-1)
dp[j]=max(dp[j],dp[j-s[i]]+1);
}
}
printf("%d\n",dp[n]);
return 0;
}