完全背包的模板,至于原理嘛。。。想几天都没想明白,脑子锈了。。以后慢慢感悟。。想看解释,点这里。
其实完全背包就是把01背包所处理的对象的顺序反过来,推理过程就比较难以理解了。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int t,n;
int dp[10005];//dp[i]表示死亡骑士的大钞面额为i是最多能买dp[i]的道具
int a[3]={150,200,350};
scanf("%d",&t);
while(t--){
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i=0;i<3;i++){
for(int j=a[i];j<=n;j++){
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
}
printf("%d\n",n-dp[n]);//死亡骑士买完道具后所剩的钱
}
return 0;
}