poj 2948 Martian Mining (dp)
http://poj.org/problem?id=2948
意:一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。如图所示,最北边有bloggium的收集站,最西边有 yeyenum 的收集站,
要你在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿(yeyenum+bloggium)?
这道 dp 1A,完全自己写的,有点小兴奋,dp菜鸟在进步。。。。。。。,
首先 开始想时
想了一个 dp 方程 最后验证是错的;
后来自己有想了一下 ,得到了正确的 状态方程
dp[i][j][0] 表示 以 i,j 为右下角的 矩形 i,j 这点 选择向北 的最大值
dp[i][j][1] 是选择向西的最大值
ans = max(dp[n][m][0],dp[n][m][1]);
状态转移:
dp[i][j][0] = 第 j 列求和 + max(dp[i][j - 1][0],dp[i][j - 1][1]);
dp[i][j][1] = 第 i 行 求和 + max(dp[i - 1][j][0],dp[i - 1][j][1]);
*/
1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<set> 8 #include<map> 9 #define Min(a,b) a>b?b:a 10 #define Max(a,b) a>b?a:b 11 #define CL(a,num) memset(a,num,sizeof(a)); 12 #define inf 9999999 13 #define maxn 400 14 #define mod (1000000000 + 7) 15 #define eps 1e-6 16 #define ll long long 17 using namespace std; 18 ll dp[maxn][maxn][2];//0 上 1 左 19 ll matu[maxn][maxn],matw[maxn][maxn]; 20 int main() 21 { 22 int n,m,i,j,t1; 23 while(scanf("%d%d",&n,&m),n + m) 24 { 25 for(i = 1 ; i <= n; ++i) 26 for(j = 1; j <= m ; ++j) 27 { 28 scanf("%lld",&matw[i][j]); 29 } 30 31 for(i = 1; i <= n ; ++i) 32 { 33 for(j = 1; j <= m ;++j) 34 scanf("%lld",&matu[i][j]); 35 } 36 CL(dp,0); 37 38 int sum = 0,k; 39 for( i = 1 ; i <= n ;++i) 40 { 41 for( j = 1; j <= m; ++j ) 42 { 43 sum = 0; 44 for(k = i ; k >= 1; --k)sum += matu[k][j]; 45 46 dp[i][j][0] = sum + max(dp[i][j - 1][0],dp[i][j - 1][1]); 47 48 sum = 0; 49 for(k = j ;k >= 1; --k) sum += matw[i][k]; 50 51 dp[i][j][1] = sum + max(dp[i - 1][j][0],dp[i - 1][j][1]); 52 53 } 54 } 55 56 printf("%lld\n",max(dp[n][m][0],dp[n][m][1])); 57 58 59 } 60 }
转载于:https://www.cnblogs.com/acSzz/archive/2012/08/11/2634007.html
poj 2948 Martian Mining (dp)相关推荐
- uva 1366 - Martian Mining(dp)
题目链接:uva 1366 - Martian Mining 题目大意:给出n和m,然后给出两种矿的分布,a种只能向上运输,b中只能向下运输,问说最多可以得到多少. 解题思路:dp[i][j]表示矩阵 ...
- UVa 1366 - Martian Mining (dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给出n*m网格中每个格子的A矿和B矿数量,A矿必须由右向左运输,B矿必须由下向上运输 ...
- UVA 1366 Martian Mining DP
为了方便,记从右到左运输的为A矿,从下到上运输的为B矿. 首先,假如我们在第i行的前k格架了运输管道运输这K个格子的A矿,那么对于i下面的其他行最少都能架上k格管子,因为不架也是浪费,这一片区域的B矿 ...
- 递推DP UVA 1366 Martian Mining
题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...
- poj 1185(状压dp)
题目链接:http://poj.org/problem?id=1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到 ...
- [POJ 1742] Coins 【DP】
题目链接:POJ - 1742 题目大意 现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值. 题目分析 使用一种 O(nm) 的 D ...
- poj 3254 状压dp
E - Corn Fields Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ 1088----滑雪(DP)
原题连接:http://poj.org/problem?id=1088 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...
- POJ 1692 Crossed Matchings dp[][] 比较有意思的dp
http://poj.org/problem?id=1692 这题看完题后就觉得我肯定不会的了,但是题解却很好理解.- - ,做题阴影吗 所以我还是需要多思考. 题目是给定两个数组,要求找出最大匹配数 ...
最新文章
- 揭开神秘的“记忆”面纱!
- Ajax服务器响应简单实例
- linux内核模块常见问题
- c语言学习-利用函数指针的方法,求任意给出两个整数的x和y的和、差。
- STM8单片机ADC连续采样模式
- python实现模拟浏览器登录_Python使用win32com实现的模拟浏览器功能示例
- ReflectionZ_测试_01
- linux syslog 删除文件_恢复日志文件syslog在Linux中删除的方法
- python 字符串 换行_Python基础教程——字符串
- 深度学习和机器学习的相关资料
- fpgrowth算法实战 mlib_Spark MLlib FPGrowth关联规则算法
- Python 人脸识别系统
- 怎么使用手机号申请邮箱,注册移动手机邮箱有哪些步骤?
- UML 核心元素之参与者
- iPhone上塔罗牌测试软件,塔罗牌占卜:测Ta对你是用情至深还是一时兴起?准到没朋友!...
- 史上最新最全的ADB命令行
- 完美世界(完美世界(北京)网络技术有限公司)
- flutter packages get 慢 解决方案
- ASCII 控制码说明
- 传感器课程实验:传感器静态特性研究-应变式传感器
热门文章
- linux 固定usb设备,linux下多个usb设备固定名称方法
- linux怎么给所有用户安装软件,Linux安装软件的几种方法
- 服务器版的mysql怎么装_WIN7服务器配置之MySQL数据库安装图解(适用于5.1,5.5的版本)...
- Qt WebSocket服务端的简单Demo
- 【转载】博士生的女朋友有话要说!
- [模版] 网络流最大流、费用流
- 迷宫pascal程序
- linux搭建ca服务器搭建,linux下安装EJBCA 搭建私有CA服务器
- python中序列和列表区别细菌真菌病毒_python是哪种动物_动物的分类
- three.js glb 多个_25万的预算,奔驰GLB、宝马X1、奥迪Q3该怎么选