传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1248
中文题,大意就不说了。
第一道完全背包题,跟着背包九讲做的。
和0-1背包的区别在于所不同的是每种物品有无限件。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=10000+10;
int dp[MAXN];
int c[3]={ 150 , 200 , 350};
int main()
{
int kase;
scanf("%d",&kase);
while(kase--)
{
int n;
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i=0;i<3;i++)
{
for(int j=c[i];j<=n;j++)
dp[j]= max (dp[j], dp[j- c[i] ]+c[i]);
}
printf("%d\n",n-dp[n]);
}
}