UESTC 2016 Summer Training #2 Div.2(未完待续)
来源:互联网 发布:数据库开发与管理 编辑:程序博客网 时间:2024/05/18 17:39
题目来源:SPOJ AMR11、UVALive 5983-5992
A
题意:给出一个n*m的图,从左上角出发,去右下角,只能向下或者向右走,每个格子有权值,问如何安排你在左上角时的权值,使得到达右下角时权值大于1。
做法:一开始想到的就是简单的直接DP,却发现有些问题,因为在过程中可能会出现不合法的情况,会影响到最后的情况,可是却不容易想清楚最后是因为什么导致答案错误。
因此最后的做法大致有两种:
1)用二分枚举答案,然后正向DP,找到符合条件的最小的答案。
2)逆向DP,假设最后走到终点是体力为1,在逆推的过程中,记住一旦出现小于1的体力值,就要将其改为1,最后得到的DP矩阵中最小的数一定只能是1
下面代码是第二种做法。第一种做法网上也很多,可以自行去找。
#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 1e9 + 7;using namespace std;int R,C,T;int S[505][505];int dp[505][505];int main(){ scanf("%d",&T); while(T--) { memset(S,0,sizeof(S)); scanf("%d %d",&R,&C); for(int i = 1;i <= R;i++) for(int j = 1;j <= C;j++) scanf("%d",&S[i][j]); memset(dp,0,sizeof(dp)); dp[R][C] = 1; for(int i = R - 1;i > 0;i--) dp[i][C] = max(dp[i + 1][C] - S[i][C],1); for(int j = C - 1;j > 0;j--) dp[R][j] = max(dp[R][j + 1] - S[R][j],1); for(int i = R - 1;i > 0;i--) for(int j = C - 1;j > 0;j--) dp[i][j] = max(min(dp[i + 1][j],dp[i][j + 1]) - S[i][j],1); printf("%d\n",dp[1][1]); } return 0;}
0 0
- UESTC 2016 Summer Training #2 Div.2(未完待续)
- UESTC 2016 Summer Training #1 Div.2(未完待续)
- UESTC 2016 Summer Training #3 Div.2(未完待续)
- UESTC 2016 Summer Training #4 Div.2(未完待续)
- UESTC 2016 Summer Training #5 Div.2(未完待续)
- UESTC 2016 Summer Training #6 Div.2(未完待续)
- UESTC 2016 Summer Training #10 Div.2(未完待续)
- UESTC 2016 Summer Training #18 Div.2(未完待续)
- UESTC 2016 Summer Training #19 Div.2(未完待续)
- UESTC 2017 Summer Training #2 Div.2
- UESTC 2017 Summer Training #1 Div.2
- UESTC Summer Team Training #2
- UESTC 2016 Summer Training #2 Div.2 A dp、递推、多阶段问题
- UESTC 2016 Summer Training #1 Div.2 E - Accepted Passwords 讨论
- UESTC 2016 Summer Training #1 Div.2 F - Mission in Amman (A) 动态维护(刷新:--、++)
- UESTC 2016 Summer Training #1 Div.2 L - Plus or Minus (A) dfs
- UESTC 2016 Summer Training #1 Div.2 H - Queue (A) 贪心
- UESTC 2016 Summer Training #4 Div.2 A - (。•_•。) 预处理打表
- 我不是产品经理-001
- Ubuntu 14.04 LTS 软件安装及卸载
- android中从一个app跳转到另一个app的方法
- Spring Security3 - MVC 整合教程 (初识Spring Security3)
- dojo学习1-HelloDojo!
- UESTC 2016 Summer Training #2 Div.2(未完待续)
- 并查集(POJ1988)
- JMeter JDBC连接Mysql时的乱码问题
- java的一些基本问题
- Android5.1中surface和CpuConsumer下生产者和消费者间的处理框架简述
- bat与adb命令结合使用
- 解决ThinkPHP Call to a member function assign() on a non-object
- android布局--Android fill_parent、wrap_content和match_parent的区别
- 使用MyBatis_Generator生成Dto、Dao、Mapping