UVALive 5983 MAGRID DP
题意:在一个n*m的网格上,从(0,0)走到(n-1,m-1),每次只能向右或者向下走一格。一个人最初有一个生命值x,走到每一个格生命值会 变为x + s[i][j],(s[i][j]可为负,0,正),若生命值小于等于0,则人死亡。告诉网格上所有s[i][j],求x的最小值使得该人能够或者走到 (n-1,m-1)。|s[i][j]| < 1000,n,m < 500。
解法:这道题不能直接dp,否则会错。必须要先二分x的值,然后再dp。dp[i][j]记录的是走到(i,j)格所能有的最大生命值,但是要注意,d[i][j]只能在d[i][j-1]或d[i-1][j]中有一个为正时才能转移过来。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int dp[][];
int sum[][];
const int inf=;
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(dp,,sizeof(dp));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
sum[i][j]=inf;
int n,m;
scanf("%d%d",&n,&m);
int ans=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)
scanf("%d",&dp[i][j]);
}
sum[n][m]=;
for(int i=n;i>=;i--){
for(int j=m;j>=;j--){ sum[i-][j]=min(sum[i-][j],sum[i][j]-dp[i-][j]);
if(sum[i-][j]<=)
sum[i-][j]=; sum[i][j-]=min(sum[i][j-],sum[i][j]-dp[i][j-]);
if(sum[i][j-]<=)
sum[i][j-]=;
/* if(i==1){
dp[i][j]+=dp[i][j-1];
if(dp[i][j]<=0){
sum[i+j]=min(sum[i+j],-dp[i][j]+1);
dp[i][j]=1;
}
}
else if(j==1){
dp[i][j]+=dp[i-1][j];
if(dp[i][j]<=0){
sum[i+j]=min(sum[i+j],-dp[i][j]+1);
dp[i][j]=1;
}
}
else{
dp[i][j]+=max(dp[i-1][j],dp[i][j-1]);
*/ } } printf("%d\n",sum[][]);
}
return ;
}
UVALive 5983 MAGRID DP的更多相关文章
- UVALive 5983 MAGRID
题意:在一个n*m的网格上,从(0,0)走到(n-1,m-1),每次只能向右或者向下走一格.一个人最初有一个生命值x,走到每一个格生命值会变为x + s[i][j],(s[i][j]可为负,0,正), ...
- UVALive 5983 二分答案+dp
想了很久都想不出怎么dp,然后发现有些例子,如果你开始不确定起始值的话,是不能dp的,每种状态都有可能,所以只能二分一个答案,确定开始的val值,来dp了. #include <cstdio&g ...
- 2015暑假训练(UVALive 5983 - 5992)线段树离线处理+dp
A: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83690#problem/A 题意:N*M的格子,从左上走到右下,要求在每个点的权值 ...
- UVALive 4764 简单dp水题(也可以暴力求解)
B - Bing it Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status ...
- UVALive 6908---Electric Bike(DP或记录型深搜)
题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- UVALive 4490 压缩DP
转载自http://blog.csdn.net/zstu_zlj/article/details/9903589 没有接触过压缩DP.位运算也不太熟.所以理解了思路还是不懂代码.
- UVALive 4869 Profits DP
G - Profits Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status ...
- Remember the Word UVALive - 3942(dp+trie)
题意: 给S个不同的单词和一个长字符串 问将其分解为若干个单词有多少种方法(单词可重复使用) 解析: dp[i]表示在这个字符串中以某个位置i为起点的 的一段子字符串 则这个子字符串若存在某个前缀恰好 ...
- UVALive - 7061 区间DP初步
题意:杀一只狼i会收到a[i]+b[i当前左边]+b[i当前右边]的攻击,求杀死所有狼的最小代价 #include<iostream> #include<algorithm> ...
随机推荐
- Tarjan在图论中的应用(一)——用Tarjan来实现强连通分量缩点
前言 \(Tarjan\)是一个著名的将强连通分量缩点的算法. 大致思路 它的大致思路就是在图上每个联通块中任意选一个点开始进行\(Tarjan\)操作(依据:强连通分量中的点可以两两到达,因此从任意 ...
- 【BZOJ1854】[SCOI2010] 游戏(匈牙利算法的应用)
点此看题面 大致题意: 有\(n\)个物品,每个物品有两个属性且只能选择其中的一个,要求选择的物品属性值从\(1\)开始递增,问最多能选多少个. 暴搜 看到这题,我第一反应是暴搜... ... 好不容 ...
- 数组使用NSUserDefaults存储的问题,
最近在做搜索记录的时候,由于搜索记录是存储在本地的,而且都是字符串,我考虑到数据量也不是太大,于是就懒的使用数据库了. 于是就想到了NSUserDefaults 存储的方式, 但是由于之间对于数组没有 ...
- 1072: [SCOI2007]排列perm
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3000 Solved: 1875[Submit][Status][Discuss] Descript ...
- SAP 日志管理
现在项目上自开发的dialog程序越来越多,有很多敏感数据需要像SAP标准的业务一样,能看到所有的修改日志,要想实现日志的功能,有以下几个办法: 办法一.建一个日志表,在原有表的基础上,加上日期和时间 ...
- linux下vim命令
进入vim的命令 vim filename :打开或新建文件,并将光标置于第一行首 vim +n filename :打开文件,并将光标置于第n行首 vim + filename :打开文件,并将光标 ...
- OpenFaceswap 入门教程(1):软件安装篇
---恢复内容开始--- 众多换脸软件中,DeepFaceLab其实是安装和使用最方便,更新最快的,但是由于其没有可是化界面,对于很新手来说,可能入门还是有点难度.那么今天就来介绍一款操作极其直观和简 ...
- Android Studio 3.0 安装注意点
在安装Android studio 3.0+ 时候,会遇到默认不带Android SDK 的问题. 在启动Android studio 后,会提示让选择SDK目录,选择下载目录,对应的去下载 那么问题 ...
- STM32串口中断实例二
int main(void) { uint8_t a=;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时 ...
- Selenium与PhantomJS【转】
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCli ...