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 ...
随机推荐
- Quartz 2D 图形上下文栈 矩阵 裁剪
Quartz 2D 图形上下文栈 矩阵 // // DJVIew.m // 图形上下文栈 // // Created by zjj on 15/6/30. // Copyright (c) 2015 ...
- 记录一些容易忘记的属性 -- UIView
一个视图原来添加在某个父视图上,然后再将它添加到另外的一个视图上,这个视图会从原来的某个父视图中移除,添加到新的视图上. 子视图对象指针存在父视图的subviews数组中,说明,一个视图可以有多个子视 ...
- Oracle Enterprise Metadata Management (简称OEMM,Oracle元数据管理)12.1.3.0.1已经发布
在数据处理及数据仓库建设中,元数据管理是必不可少的,OEMM可以解决元数据管理过程中各种关键业务问题和技术挑战,其中包括如何元数据的统计信息,了解变更数据之后对下游的影响范围,而且OEMM站在业务的角 ...
- c++中的243、251、250错误原因
c++中的243.251.250错误,原因可能是不小心输入了中文符号.
- windows防火墙添加规则
#include <windows.h> #include <crtdbg.h> #include <netfw.h> #include <objbase.h ...
- Ubuntu 14.10 下查看系统硬件信息(实例详解)
linux查看系统的硬件信息,并不像windows那么直观,这里我罗列了查看系统信息的实用命令,并做了分类,实例解说. cpu lscpu命令,查看的是cpu的统计信息. blue@blue-pc:~ ...
- C++除法取整
使用floor函数.floor(x)返回的是小于或等于x的最大整数.如: floor(2.5) = 2 floor(-2.5) = -3 使用ceil函数.ceil(x)返回的是大于x的最小整 ...
- HDOJ-三部曲一(搜索、数学)-1006- Catch That Cow
Catch That Cow Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tot ...
- Recaman's Sequence_递推
Description The Recaman's sequence is defined by a0 = 0 ; for m > 0, am = am−1 − m if the rsultin ...
- JQuery事件手册
blur.focus blur失去焦点:focus获得焦点 load 当指定的元素(及子元素)已加载时,会发生 load() 事件 resize 当调整浏览器窗口的大小时,发生 resize ...