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][MAXN];
int n,m;
void solve(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
            s[i][j]=s[i][j-1]+a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&b[i][j]);
            t[i][j]=t[i-1][j]+b[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            f[i][j]=max(f[i-1][j]+s[i][j],f[i][j-1]+t[i][j]);
        }
    }
    printf("%d\n",f[n][m]);
}
int main()
{
    while(1){
        scanf("%d%d",&n,&m);
        if(!n) break;
        solve();
    }
    return 0;
}
时间: 2024-10-14 23:59:05

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)这两点间组成的

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

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

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这样的规模,转移有点慢

《textanalytics》课程简单总结(2):topic mining

coursera上的公开课<https://www.coursera.org/course/textanalytics>系列,讲的非常不错哦. 1."term as topic"有很多问题: 2.Improved Idea: Topic = Word Distribution: 3.定义问题(Probabilistic Topic Mining and Analysis): 4.解决问题之道(Generative Model for Probabilistic Topic 

UVAlive 10154:Dire Wolf 区间DP

Dire Wolf 题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5073 题意: 有一排的狼,每只狼有一个基础攻击力a[i],和一个加成值b[i](可以给相邻的两只狼加b[i]点攻击力,这只狼死后就不加了),你每杀一只狼需要花费能量值(狼的当前攻击力),你杀了这只狼周围的狼会自动往中间聚集(即不会有空隙),求杀

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,