[1411] TT要吃肉
来源:互联网 发布:java 调用ant 编辑:程序博客网 时间:2024/05/22 06:11
传送门:http://acm.nbut.cn/Problem/view.xhtml?id=1411
题意:一道基础的混合背包,(本题是01背包与完全背包的混合状态,肉是完全背包,菜是01背包)。
对于背包问题,背包九讲里都有,这里推荐dd大牛的(。。),传送门:http://www.cnblogs.com/jbelial/articles/2116074.html。
所有不详讲背包问题是怎么实现的,但是dd大牛里面有一句话说的很好,复杂的问题都是由简单的问题垒起来的,如此此题当然也是由简单的裸01背包+裸完全背包实现,希望仔细去看下上面的背包九讲(只有伪代码),那么直接给出完整代码:
题意:一道基础的混合背包,(本题是01背包与完全背包的混合状态,肉是完全背包,菜是01背包)。
对于背包问题,背包九讲里都有,这里推荐dd大牛的(。。),传送门:http://www.cnblogs.com/jbelial/articles/2116074.html。
所有不详讲背包问题是怎么实现的,但是dd大牛里面有一句话说的很好,复杂的问题都是由简单的问题垒起来的,如此此题当然也是由简单的裸01背包+裸完全背包实现,希望仔细去看下上面的背包九讲(只有伪代码),那么直接给出完整代码:
#include<stdio.h>#include<string.h>int dp[2005], val[2005], we[2005];int max(int a,int b){if(a>b)return a;else return b;}int main(){int v, n, m, i, j;while(~scanf("%d%d%d",&v, &n, &m)){memset(dp, 0, sizeof(dp));for(i = 1;i <= n + m;i++)//n+m个数字代表蔬菜和肉的能量值,前n个为蔬菜{scanf("%d", &val[i]);}for(i = 1;i <= n + m;i++){scanf("%d", &we[i]);//每种食物的体积}for(i = 1; i <= n + m;i++){if(i <= n){for(j = v;j >= 0;j--){if(j >= we[i]){dp[j] = max(dp[j], dp[j - we[i]] + val[i]);}}}else{for(j = 0;j <= v;j++){if(j >= we[i]){dp[j] = max(dp[j], dp[j - we[i]] + val[i]);}}}}int x = dp[0];for(j = v; j >= 0; j--){if(dp[j] > x)x = dp[j];}printf("%d\n",x);}return 0;}
0 0
- [1411] TT要吃肉
- tt
- tt
- tt
- tt
- tt
- tt
- tt
- TT
- TT
- tt
- tt
- tt
- TT
- tt
- TT
- tt
- TT
- NOJ [1060] Countless Core Computers
- [HDOJ 1556] Color the ball(线段树成段更新入门)
- nbut 1058 火烧赤壁 2
- 杨辉三角
- [nbut 1405] bridge and island
- [1411] TT要吃肉
- [NOJ 1137] The Running Man
- 如何自己构造ADO的ConnectionString
- 有关SIP中的PRACK的含义和使用
- 自然对数
- outStream.flush()
- ubuntu13.04 使用halt机器没有关机的解决办法
- Codeforces Round #139 (Div. 2) E. Unsolvable
- XCode 同一Project创建多个target