背包

多重背包
多重背包模板

#include<stdio.h>
#define max(a,b) ((a)>(b)?(a):(b))
const int N = 10010;
int t[N],c[N],p[N];//時間,美學,觀賞次數(shù) 
int f[1010];
int main(){
    int h1,h2,m1,m2,n,time;
    scanf("%d:%d %d:%d %d",&h1,&m1,&h2,&m2,&n);
    time = (h2-h1)*60+m2-m1;
    for(int i = 1;i<=n;i++){
        scanf("%d%d%d",&t[i],&c[i],&p[i]);
    } 
    for(int i = 1;i<=n;i++){
        int k = p[i];
        if(p[i]==0){
            for(int j = time-t[i];j>=0;j--)
                f[j]=max(f[j],f[j+t[i]]+c[i]); 
        }
        else{
            for(int z = 1;z<=p[i];z<<=1){
                p[i]-=z;
                for(int j = 0;j<=time-z*t[i];j++){
                    f[j] = max(f[j],f[j+z*t[i]]+z*c[i]);
                    //printf("%d %d %d %d %d\n",i,z,j,f[j],k);
                }   
            }
            if(p[i])
            for(int j = 0;j<=time-p[i]*t[i];j++){
                f[j] = max(f[j],f[j+p[i]*t[i]]+p[i]*c[i]);
                //printf("%d %d %d %d\n",i,j,f[j],k);
            }
        }
    }
    int ans = 0;
    for(int i = 0;i<=time;i++)ans = max(ans,f[i]);
    printf("%d",ans);
} 
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容