hdu 4501(背包)
来源:互联网 发布:linux如何设置双屏显示 编辑:程序博客网 时间:2024/06/17 06:50
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4501
思路:dp[l][i][j][p]表示选前l件时花费i元,积分j,免费p时最大价值
View Code
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 const int N=104; 5 using namespace std; 6 7 struct Node{ 8 int price; 9 int score;10 int value;11 }node[N];12 int dp[N][N][N][6];//表示选前l件时花费i元,积分j,免费p时最大价值//13 14 15 int main(){16 int n,v1,v2,k;17 while(~scanf("%d%d%d%d",&n,&v1,&v2,&k)){18 int ans=0;19 for(int i=1;i<=n;i++){20 scanf("%d%d%d",&node[i].price,&node[i].score,&node[i].value);21 }22 memset(dp,0,sizeof(dp));23 for(int l=1;l<=n;l++){24 for(int i=0;i<=v1;i++){25 for(int j=0;j<=v2;j++){26 for(int p=0;p<=k;p++){27 dp[l][i][j][p]=dp[l-1][i][j][p];28 if(i-node[l].price>=0){29 dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i-node[l].price][j][p]+node[l].value);30 }31 if(j-node[l].score>=0){32 dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i][j-node[l].score][p]+node[l].value);33 }34 if(p>0)dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i][j][p-1]+node[l].value);35 ans=max(ans,dp[l][i][j][p]);36 }37 }38 }39 }40 printf("%d\n",ans);41 }42 return 0;43 }
0 0
- hdu 4501(背包)
- HDU 4501 三重背包
- hdu 4501 多维背包
- hdu 2844(背包)
- hdu 饭卡 (背包)
- hdu Robberies (背包)
- HDU 5410(01背包+完全背包)
- hdu 4501 多维背包模版
- hdu 4501 多维01背包
- hdu 4501多维背包入门
- hdu 4501 三重背包 易错点
- hdu 4501(三维背包问题)
- hdu 3732(多重背包)
- hdu 3466(背包变形)
- hdu 2660 (01背包)
- hdu 4504 (背包01)
- hdu 3535 AreYouBusy(背包)
- hdu 2602 (01背包)
- hdu 2141(二分)
- hdu 2116(判断是否溢出)
- hdu 1725(Find minimal sum)
- hdu 2188
- ListView去掉自带的线条和滚动条
- hdu 4501(背包)
- hdu 4504(背包最优方案数)
- hdu 4502
- hdu 4508(完全背包)
- hdu 4509(memset标记)
- hdu 4506(快速幂)
- hdu 2176+hdu 2147
- Dubbo zookeeper 初探(1)
- hdu 2136(最大素数因子)