#include <stdio.h>
#include <string.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int C,n,m,i,j,k;
int s[200],p[200],h[200],c[200];
scanf("%d",&C);
while(C--){
scanf("%d%d",&n,&m);
for(i=0;i<=m-1;i++){
scanf("%d%d%d",&p[i],&h[i],&c[i]);
}
memset(s,0,sizeof(s));
for(i=0;i<=m-1;i++){
for(j=0;j<=c[i]-1;j++){
for(k=n;k>=p[i];k--){
s[k]=max(s[k],s[k-p[i]]+h[i]);
//printf("1111\n");
}
}
}
printf("%d\n",s[n]);
}
return 0;
}
多重揹包問題,我這裏當做01揹包來處理,每種大米有固定的數量,每次選擇的時候把一袋大米當做單獨的物品來選。
所以在選某一種大米的時候需要加一個循環,長度爲c[i]。
現在對於揹包問題還是似懂非懂的狀態,還好這個題比較簡單= =