HDU 5234 Happy birthday --- 三维01背包
题目大意:给定n,m,k,以及n*m(n行m列)个数,k为背包容量,从(1,1)开始只能往下走或往右走,求到达(m,n)时能获得的最大价值
解题思路:dp[i][j][k]表示在位置(i,j)有一个容量为k的背包所能获得的最大价值
决策:a[i][j]处的数是否选取
不选取: dp[i][j][k]= max(dp[i-1][j][k], dp[i][j-1][k])
选取:首先要求k >=a[i][j],那么dp[i][j][k] = max(dp[i-1][j][k-w[i][j]], dp[i][j-1][k-w[i][j]]);
相当于求四者的最大值,最后dp[m][n][k]即为所求结果
/* HDU 5234 Happy birthday --- 三维01背包 */
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
int w[maxn][maxn];
int dp[maxn][maxn][maxn];
int n, m, V; int main()
{
#ifdef _LOCAL
freopen("D:\\input.txt", "r", stdin);
#endif //n行m列容量为V
while (scanf("%d%d%d", &n, &m, &V) == ){
for (int i = ; i <= n; ++i){
for (int j = ; j <= m; ++j){
scanf("%d", w[i] + j);
}//for(j)
}//for(i) memset(dp, , sizeof dp); for (int i = ; i <= n; ++i){
for (int j = ; j <= m; ++j){
for (int k = ; k <= V; ++k){
//w[i][j]不取的时候
int a = max(dp[i - ][j][k], dp[i][j - ][k]);
int b = ;
//k > w[i][j], w[i][j]取的时候
if (k - w[i][j] >= ){
b = max(dp[i - ][j][k - w[i][j]], dp[i][j - ][k - w[i][j]]) + w[i][j];
}
dp[i][j][k] = max(a, b);
}
}//for(j)
}//for(i) printf("%d\n", dp[n][m][V]);
} return ;
}
HDU 5234 Happy birthday --- 三维01背包的更多相关文章
- HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #in ...
- HDOJ(HDU).2546 饭卡(DP 01背包)
HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...
- HDOJ(HDU).2602 Bone Collector (DP 01背包)
HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...
- HDU 1864 最大报销额 0-1背包
HDU 1864 最大报销额 0-1背包 题意 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上, ...
- hdu 2639 第k大01背包
求每个状态里的k优解,然后合并 /* HDU 2639 求01背包的第k大解. 合并两个有序序列 */ #include<stdio.h> #include<iostream> ...
- 【HDU 3810】 Magina (01背包,优先队列优化,并查集)
Magina Problem Description Magina, also known as Anti-Mage, is a very cool hero in DotA (Defense of ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU 3092 Least common multiple 01背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3092 Least common multiple Time Limit: 2000/1000 MS ...
- HDU 5656 CA Loves GCD 01背包+gcd
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5656 bc:http://bestcoder.hdu.edu.cn/contests/con ...
随机推荐
- Hibernate中的继承映射
1.继承映射 继承映射分为两种情况:简单继承映射和继承映射. 在简单继承映射中,每个子类都要写一个映射文件. 在继承映射中,只使用一个映射文件.继承映射分为三种情况: 所有子类映射到一张表 需要使用鉴 ...
- seajs 使用 jquery插件
define(function(require,exports,moudles){ return function(jquery){ (function($) { $.fn.pri= function ...
- HDU 1465
排列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 大家常常 ...
- HDU 4627 E(Contest #3)
Description There are many unsolvable problem in the world.It could be about one or about zero.But t ...
- Android listview 制作表格样式+由下往上动画弹出效果实现
效果是这样的:点击按下弹出表格的按钮,会由下往上弹出右边的列表,按下返回按钮就由上往下退出界面. 布局文件: activity_main.xml <RelativeLayout xmlns:an ...
- git命令学习用
- hadoop创建两大错误:Bad connection to FS. command aborted. exception和Shutting down NameNod...
我的hadoop启动后,各个节点都正常,但是无法查看hdfs目录,错误提示 Bad connection to FS. command aborted. 查了下网上的解决办法,主要是删除tmp下的所 ...
- keil(持续更新)
1函数格式提示 2 cording时有警告和错误提示 3 类的成员 提示
- fwrite错误
使用fwrite出错 f:\dd\vctools\crt_bld\self_x86\crt\srt\write.cline:69expression:_osfile(fh)&FOPEN 使用w ...
- 极客DIY:RFID飞贼打造一款远距离渗透利器
本文使用最新的渗透工具RFID飞贼(Tastic RFID Thief)和RFID感应破解技术来获取一些拥有安防的建筑物的访问权限. Tastic RFID Thief是一个无声远距离RFID读卡器, ...