水題堆4.M - 悼念512汶川大地震遇難同胞——珍惜現在,感恩生活

#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]。

現在對於揹包問題還是似懂非懂的狀態,還好這個題比較簡單= =

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章