传送门: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]); } }