[DP]Hdu 5234 Happy birthday

水题代码:

#include <iostream>
#include <cstring>
using namespace std;

const int MAXN=105;
int w[MAXN][MAXN];
int dp[MAXN][MAXN][MAXN];
int n,m,kk;
int max(int a,int b){
	if(a<b)return b;
	return a;
}

int main(){
	while(cin>>n>>m>>kk){
		//cout<<n<<" "<<m<<" "<<kk<<endl;
		memset(dp,0,sizeof dp);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>w[i][j];
			}
		}

		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				for(int k=kk;k>=0;k--){

					dp[i][j][k]=max(dp[i][j][k],max(dp[i-1][j][k],dp[i][j-1][k]));
                    if(k>=w[i][j])
                    {
                        dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k-w[i][j]]+w[i][j]);
                        dp[i][j][k]=max(dp[i][j][k],dp[i][j-1][k-w[i][j]]+w[i][j]);
                    }
				}
			}
		}
		cout<<dp[n][m][kk]<<endl;
	}
}

  

时间: 2024-11-25 07:19:11

[DP]Hdu 5234 Happy birthday的相关文章

HDU 5234 Happy birthday --- 三维01背包

HDU 5234 题目大意:给定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

简单的dp hdu 数塔(水题)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21314    Accepted Submission(s): 12808 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少

fwt优化+树形DP HDU 5909

1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include <bits/stdc++.h> 6 // #include <iostream> 7 // #include <cstdio> 8 // #include <cstdlib> 9 // #include <algorithm> 10 // #inc

I DP Hdu 1421

<span style="color:#3333ff;">/* ______________________________________________________________________________________________________ author : Grant Yuan time : 2014.7.19 algorithm : dp explain : 首先对所有的物体按照重量的从小到大进行一次排序,第i件物体只能和第i-1件物体配对;

dp --- hdu 4939 : Stupid Tower Defense

Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1219    Accepted Submission(s): 361 Problem Description FSF is addicted to a stupid tower defense game. The goal of tower

[数位dp] hdu 3967 Zero&#39;s Numberd

题意:对于两个数i和k,把它分为两个部分的数,n和m,如果(n+m)%k=0 那么这算一种分法 比如 333可分成,3.33或者33.3,对于 (333,3)就等于2. 现在给出 a.b.k,为 (a~b,k)有多少种分法 思路:对于一个数,注意前导零并枚举分点就好了. dp[22][22][22][22][2],   代表 i位,分点为fd,余数mod,对于k取余,是否有前导零 代码: #include"cstdlib" #include"cstdio" #inc

hdu 5234 Happy birthday 背包 dp

Happy birthday Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5234 Description 今天是Gorwin的生日.所以她的妈妈要实现她的一个愿望.Gorwin说她想吃很多蛋糕.所以他妈妈带她来到了蛋糕园. 这个园子被分成了n*m个方格子.在每一个格子里面,有一个蛋糕.第i行,第j列的格子中有一个重量为wij千克的蛋糕,Gorwin从左上角(1,1

HDU 5234 DP背包

题意:给一个n*m的矩阵,每个点是一个蛋糕的的重量,然后小明只能向右,向下走,求在不超过K千克的情况下,小明最终能吃得最大重量的蛋糕. 思路:类似背包DP: 状态转移方程:dp[i][j][k]----在i,j位置时,最大容量为k时的最大值: 做背包循环一般从1开始,因为需要坐标-1的情况,从0开始需要特判,而且容易RE: 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include &l

hdu 5234 (bc #42 C)Happy birthday(dp)

Happy birthday Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 672    Accepted Submission(s): 302 Problem Description Today is Gorwin’s birthday. So her mother want to realize her a wish. Gorwin