UVALive 3530 Martian Mining

分析:

对于网格grid[i][j]如果放向上的管道,那么grid[i][k], k>j 贪心地放向上的管道。

那么定义dp[i][j]表示第i行,最后一个放向左的管道是j的最大总矿量。

j = 0表示全放向上,j = m表示全放向左。

如果grid[i][j]要往放向上的管道的话,前提是grid[i-1][j]也要是向上的管道。

因此转移为dp[i][j] = max(dp[i-1][k]+sumA(1,j)+sumB(j+1,n) ), k >= j

对于N= 500这样的规模,转移有点慢。

对于sumA,sumB可以处理前缀和,

对于max(dp[i-1][k]),同样可以递推出来 max(dp[i-1][k]) = max(max(dp[i-1][k-1]),dp[i-1][k])

复杂度O(n*m)

窝觉得如果不是在做动态规划的专题窝可能不会往这方面去想。

#include<bits/stdc++.h>
using namespace std;

const int N = 501;
int A[N][N], B[N][N];
int dp[N][N];

//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int n,m;
    while(scanf("%d%d",&n,&m),n){
        for(int i = 1; i <= n ;i++){
            for(int j = 1; j <= m; j++){
                scanf("%d",A[i]+j);
                A[i][j] += A[i][j-1];
            }
        }
        for(int i = 1; i <= n ;i++){
            for(int j = 1; j <= m; j++){
                scanf("%d",B[i]+j);
                B[i][j] += B[i][j-1];
            }
        }
        for(int j = 0; j <= m; j++){
            dp[1][j] = A[1][j] + B[1][m] - B[1][j];
        }
        for(int i = 2; i <= n; i++){
            dp[i][0] = dp[i-1][0];
            for(int j = 1; j <= m; j++){
                dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
            }
            for(int j = 0; j <= n; j++){
                dp[i][j] += A[i][j] + B[i][m] - B[i][j];
            }
        }
        int ans = 0;
        for(int j = 0; j <= m; j++){
            ans = max(ans,dp[n][j]);
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-13 22:17:45

UVALive 3530 Martian Mining的相关文章

poj 2948 Martian Mining (dp)

题目链接 完全自己想的,做了3个小时,刚开始一点思路没有,硬想了这么长时间,想了一个思路, 又修改了一下,提交本来没抱多大希望 居然1A了,感觉好激动..很高兴dp又有所长进. 题意: 一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个 格子内的数量是多少.最北边有bloggium的收集站,最西边有 yeyenum 的收集站. 现在要在这些格子上面安装向北或者向西的传送带(每个格子自能装一种).问最多能采到多少矿. 传送带只能直着走,不可弯曲,不能交

POJ 2948 Martian Mining

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

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

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]

递推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])

UVALive - 3530:Martian Mining

dp 可以发现,对于(i,j),要么把它运上去,那么把它运到左边,枚举一下即可 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define MAXN 505 using namespace std; int f[MAXN][MAXN]; int a[MAXN][MAXN],b[MAXN][MAXN]; int s[MAXN][MAXN],t[MAXN][MA

UVA - 1366 Martian Mining 三维dp

题目大意:在一个n * m的格子上有两种矿物.A矿只能从右往左运输,B矿只能从下往上运输,现在要求你在这格子上铺设管道(管道不能中断或者拐弯),用管道来运输A矿和B矿,使得运输的A矿和B矿的和最大 解题思路:设dp[i][j][0]为以(i,j)为矩阵的右下角,铺设从右往左的管道所能运输的最大值,那么第i行的第1列到第j列只能铺设从右往左的管道,所以dp[i][j][0] = max(dp[i-1][j][0],dp[i-1][j][1]) + A[i][j] 设dp[i][j][1]为以(i,

UVa 1366 DP Martian Mining

网上的题解几乎都是一样的: d(i, j, 0)表示前i行前j列,第(i, j)个格子向左运输能得到的最大值. d(i, j, 1)是第(i, j)个格子向上运输能得到的最大值. 但是有一个很关键的问题没有解释: 某个格子中的A矿或者B矿一定有其中一种能够运出来吗?有没有可能这个格子没有修建管道,仅仅是为了给其他管道让路,使得总体取得最大值呢? 从题解的状态转移方程上来看,不会的. 自己YY了好久,也没有想到一个能严格证明的方法.. 1 #include <iostream> 2 #inclu

(中等) 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.