poj 2948 Martian Mining (dp)

题目链接

完全自己想的,做了3个小时,刚开始一点思路没有,硬想了这么长时间,想了一个思路,

又修改了一下,提交本来没抱多大希望 居然1A了,感觉好激动。。很高兴dp又有所长进。

题意: 一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个

格子内的数量是多少。最北边有bloggium的收集站,最西边有 yeyenum 的收集站。

现在要在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿。

传送带只能直着走,不可弯曲,不能交叉。

分析:做题的时候一直在想状态转移 之间的关系,后来发现应该从左上角开始看起,每一个非零值的

格子,都要有一个传送的方向,因为是从上往下,从左往右的,所以前面的已经计算过了,所以方程

为d[i][j] = max(d[i-1][j]+ye[i][j], d[i][j-1]+bl[i][j]);

ye[i][j]表示从i行0列 到 i行j列的ye值, bl类似。

样例解释:

^     ^
< < < ^
< < < ^
< < < ^
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #define LL long long
 6 using namespace std;
 7 const int maxn = 500 + 10;
 8 int n, m, d[maxn][maxn], ye[maxn][maxn], bl[maxn][maxn];
 9
10 int main()
11 {
12     int i, j, a;
13     while(~scanf("%d%d", &n, &m))
14     {
15         if(n==0 && m==0) break;
16         memset(d, 0, sizeof(d));
17         memset(ye, 0, sizeof(ye));
18         memset(bl, 0, sizeof(bl));
19         for(i = 1; i <= n; i++)
20         for(j = 1; j <= m; j++)
21         {
22             scanf("%d", &a);
23             ye[i][j] = ye[i][j-1] + a;
24         }
25         for(i = 1; i <= n; i++)
26         for(j = 1; j <= m; j++)
27         {
28             scanf("%d", &a);
29             bl[i][j] = bl[i-1][j] + a;
30         }
31         for(i = 1; i <= n; i++)
32         for(j = 1; j <= m; j++)
33         d[i][j] = max(d[i-1][j]+ye[i][j], d[i][j-1]+bl[i][j]);
34
35         printf("%d\n", d[n][m]);
36     }
37     return 0;
38 }

poj 2948 Martian Mining (dp),布布扣,bubuko.com

时间: 2024-10-13 09:53:08

poj 2948 Martian Mining (dp)的相关文章

POJ 2948 Martian Mining(DP)

题目链接 题意 : n×m的矩阵,每个格子中有两种矿石,第一种矿石的的收集站在最北,第二种矿石的收集站在最西,需要在格子上安装南向北的或东向西的传送带,但是每个格子中只能装一种传送带,求最多能采多少矿. 思路 :记忆化搜索.也可以用递推. //2948 #include <stdio.h> #include <string.h> #include <iostream> using namespace std ; int yeye[510][510] ,blog[510]

POJ 2948 Martian Mining

题目大意: NASA在火星发现了一个矿场矩阵.矩阵中的每个单元格都有两种矿Yeyenum和Bloggium.我们知道每个单元格中这两种矿的数量.NASA决定在北边建造Bloggium的矿石精炼厂,在西边建造Yeyenum的矿石精炼厂.于是需要我们把bloggium矿石向北运(行号等于0的方向),把Yeyenum矿石向西运(列号等于0的方向).但由于矿石的不稳定在建造传送带时有特殊要求.求建造传送带后两种矿石最多能收集多少. 解题思路: dp[i][j]代表着从(0,0)到(i,j)这两点间组成的

(中等) POJ 2948 Martian Mining,DP。

Description The NASA Space Center, Houston, is less than 200 miles from San Antonio, Texas (the site of the ACM Finals this year). This is the place where the astronauts are trained for Mission Seven Dwarfs, the next giant leap in space exploration.

递推DP UVA 1366 Martian Mining

题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题,首先我题目看了老半天,看懂后写出前缀和又不知道该如何定义状态好,写不出状态转移方程,太弱了. 5 dp[i][j]表示以(i, j)为右下角时求得的最大值,状态转移方程:dp[i][j] = max (dp[i-1][j] + sum1[i][j], dp[i][j-1] + sum2[i][j])

poj2948--Martian Mining(dp)

Martian Mining Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2459   Accepted: 1517 Description The NASA Space Center, Houston, is less than 200 miles from San Antonio, Texas (the site of the ACM Finals this year). This is the place whe

UVA 1366 九 Martian Mining

Martian Mining Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 1366 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 int dp[505][505][3]; 7

UVa1366Martian Mining (DP)

Martian Mining Description The NASA Space Center, Houston, is less than 200 miles from San Antonio, Texas (the site of the ACM Finals this year). This is the place where the astronauts are trained for Mission Seven Dwarfs, the next giant leap in spac

POJ 1384 Piggy-Bank 背包DP

所谓的完全背包,就是说物品没有限制数量的. 怎么起个这么intimidating(吓人)的名字? 其实和一般01背包没多少区别,不过数量可以无穷大,那么就可以利用一个物品累加到总容量结尾就可以了. 本题要求装满的,故此增加个限制就可以了. #include <stdio.h> #include <stdlib.h> #include <string.h> inline int min(int a, int b) { return a < b? a : b; } c

POJ 3280 Cheapest Palindrome DP题解

看到Palindrome的题目,首先想到的应该是中心问题,然后从中心出发,思考如何解决. DP问题一般是从更加小的问题转化到更加大的问题,然后是从地往上 bottom up地计算答案的. 能得出状态转移方程就好办了,本题的状态转移方程是: if (cowID[i] == cow{j]) tbl[id][i] = tbl[id][i+1];//相等的时候无需改动 else tbl[id][i] = min(tbl[!id][i+1] + cost[cowID[i]-'a'], tbl[!id][i