Happy birthday

Accepts: 178
Submissions: 511
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)

问题描述
今天是Gorwin的生日。所以她的妈妈要实现她的一个愿望。Gorwin说她想吃很多蛋糕。所以他妈妈带她来到了蛋糕园。这个园子被分成了n*m个方格子。在每一个格子里面,有一个蛋糕。第i行,第j列的格子中有一个重量为wij千克的蛋糕,Gorwin从左上角(1,1)的格子开始走,走到右下角(n,m)的格子。在每一步中,Gorwin可以向右或者向下走,即是:Gorwin站在(i,j)的时候,她可以走向(i+1,j)或者(i,j+1) (然而她不能走出这个花园)。当Gorwin到达一个格子的时候,她可以把那个格子里面的蛋糕吃完或者不吃。但是,她不能只吃一部分。她的胃不是那么大,所以她最多只能吃K千克的蛋糕。现在,Gorwin站在左上角,她在看蛋糕园的地图,想要找出一条路,能够使得她吃到的蛋糕最多的一条路。请你来帮帮忙。
输入描述
多组测试数据(大概15组), 每一组数据在一行中给出n, m, K.
在接下来n行中,第i行有m个整数wi1,wi2,wi3,⋯wim,代表第i行m个蛋糕的重量。
请处理到文件末尾。[参数约定]
所有输入均为整数。
1<=n,m,K<=100
1<= wij <=100
输出描述
对于每一个数据,输出一个值,代表Gorwin最多能吃到的蛋糕重量。
输入样例
1 1 2
3
2 3 100
1 2 3
4 5 6
输出样例
0
16
Hint
在第一组数据中,Gorwin不能吃蛋糕的一部分,所以她不能吃掉任何蛋糕。
在第二个数据中,Gorwin按照以下路径行走(1,1)->(2,1)->(2,2)->(2,3)
当她通过一个格子的时候,就把那个格子里面的蛋糕吃光。这样她吃的总重量就是1+4+5+6=16。

官方题解:

类似于背包,Dp[i][j][k]表示在第(I,j)个格子背包容量为k的时候的最大值。
Dp[i][j][k]=max(dp[i−1][j][k],dp[i][j−1][k],dp[i−1][j][k−w[i][j]]+w[i][j],dp[i][j−1][k−w[i][j]]+w[i][j]);
初值所有均为0。
答案取max(dp[n][m][i]) for 0≤i≤C, C为最大容量。
总状态是n∗m∗k,转移o(1)最后复杂度是n∗m∗k
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=110;
int dp[maxn][maxn][maxn];
int N,M,K;
int w[maxn][maxn];
int main()
{while(scanf("%d%d%d",&N,&M,&K)!=EOF){for(int i=1;i<=N;i++)for(int j=1;j<=M;j++)scanf("%d",&w[i][j]);memset(dp,0,sizeof(dp));for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){for(int k=w[i][j];k<=K;k++)dp[i][j][k]=max(max(dp[i-1][j][k],dp[i][j-1][k]),max(dp[i-1][j][k-w[i][j]]+w[i][j],dp[i][j-1][k-w[i][j]]+w[i][j]));}}int ans=0;for(int i=K;i>=0;i--)ans=max(ans,dp[N][M][i]);printf("%d\n",ans);}return 0;
}

hdu 5234 - Happy birthday DP相关推荐

  1. hdu 5234 Happy birthday

    hdu 5234 Happy birthday 题意: 今天是Gorwin的生日.所以她的妈妈要实现她的一个愿望.Gorwin说她想吃很多蛋糕.所以他妈妈带她来到了蛋糕园. 这个园子被分成了n*m个方 ...

  2. hdu 5234 Happy birthday 背包 dp

    Happy birthday Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  3. HDU 5234 DP背包

    题意:给一个n*m的矩阵,每个点是一个蛋糕的的重量,然后小明只能向右,向下走,求在不超过K千克的情况下,小明最终能吃得最大重量的蛋糕. 思路:类似背包DP: 状态转移方程:dp[i][j][k]--- ...

  4. HDU 5234 Happy birthday 01背包

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5234 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  5. HDU 5234 Happy birthday 最多蛋糕

    原题: http://acm.hdu.edu.cn/showproblem.php?pid=5234 题目: Happy birthday Time Limit: 2000/1000 MS (Java ...

  6. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  7. HDU 2084 数塔 DP

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...

  8. HDU 1712 裸分组dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 N门课M天复习,第i门课花费j天获得的效益是dp[i][j] 求最大效益 分组背包,同一门课不能选两次 三 ...

  9. HDU 4628 Pieces(DP + 状态压缩)

    Pieces 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除 ...

最新文章

  1. 3D游戏设计和创作工具学习教程 3D Game Design Creation Tools
  2. 用计算机演银河系,天文学家利用计算机模拟类银河星系
  3. 重磅直播 | PointDSC:基于特征匹配的点云配准方法(CVPR2021)
  4. c语言线性表顺序存储实验小结,数据结构学习笔记-线性表顺序存储(C语言实现)...
  5. 【Java基础】递归输出目录下所有文件路径
  6. Flutter 动画组件
  7. 成为C++高手之实战项目
  8. struts2下的Action配置的各项默认值
  9. 安装Kubernetes V1.18.2
  10. AIOps智能化数据体系的构建及在字节跳动的实践
  11. LeetCode11 盛最多水的容器
  12. 浅谈央行数字货币 DCEP
  13. mapgis k9将wp、wl、wt转shp属性字段名乱码
  14. Ubuntu下使用Exchange邮件服务
  15. 激光认证,激光安全等级认证,激光安全认证,激光等级认证,激光FDA认证。
  16. ROS——基于python3实现opencv图像处理任务
  17. webgis中的比例尺实现
  18. SWFUpload多文件上传使用指南
  19. 结构体与动态内存(5.11)
  20. js根据一个时间计算N年后的时间-计算时间demo示例

热门文章

  1. 2019-2020-2 20175212童皓桢《网络对抗技术》 Exp9 Web安全基础
  2. Python语言画蓝色妖姬
  3. C语言程序结构的特点
  4. Spring Boot入门(08):整合Mybatis访问MySQL实现增删改查 | 超级详细,建议收藏
  5. Wincc系统重启后保持内部变量的值不变的设置
  6. R语者小case之——从KEGG原始网页批量生成通路的基因表格
  7. 东方博宜OJ 1863 - 【入门】特殊的数字四十
  8. android开机动画切换
  9. 计算机行业常见英语,计算机行业英文词汇
  10. 联合学习 | 纵向LR原理综述