FZU 2234
题目为中文,题意略。
这个题目我开始用贪心做bfs两次,这样做是错的,因为两次局部的最优解并不能得出全局的最优解,以下面样例说明:
3
0 10 -1
10 10 10
1 0 10
第一次贪心后:
0 10 -1
0 0 0
1 0 0
第二次贪心后:
0 0 -1
0 0 0
1 0 0
这样贪心取到的值是50,然而我们完全有方案取到51。
为什么会造成这样的状况呢?是因为我们没有枚举出所有状态,而且说明了全局的最优不等于局部最优之和。
我们首先要确认,从左上到右下,再返回左上,和两个人同时从左上出发,最终同时到达右下是等效的。
我们定义dp[i][j][k]----第一个人横坐标是i,第二个人横坐标是j,当前已走k步,所能获取最大值。由于小茗走的是最短路,
所以我们可以利用k求得横坐标相应的纵坐标
详见代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define maxn 105
using namespace std;
typedef long long LL;
const LL INF = 1e14; LL dp[maxn][maxn][];
LL value[maxn][maxn];
int n;
int mov1[] = {,,-,-};
int mov2[] = {,-,,-}; int main(){
while(scanf("%d",&n) == ){
for(int k = ;k < ;++k){
for(int i = ;i <= n;++i){
for(int j = ;j <= n;++j){
dp[i][j][k] = -INF;
}
}
}
for(int i = ;i <= n;++i){
for(int j = ;j <= n;++j){
scanf("%I64d",&value[i][j]);
}
}
dp[][][] = value[][];
for(int k = ;k <= * n - ;++k){
for(int i = ;i <= n;++i){
for(int j = ;j <= n;++j){
dp[i][j][k & ] = -INF;
int x1 = i,x2 = j;
int y1 = + (k - (i - )),y2 = + (k - (j - ));
if(y1 < || y1 > n || y2 < || y2 > n) continue;
//printf("now is (%d,%d) (%d,%d)....\n",x1,y1,x2,y2);
for(int c = ;c < ;++c){
int xx1 = x1 + mov1[c],xx2 = x2 + mov2[c];
int yy1 = + ((k - ) - (xx1 - )),yy2 = + ((k - ) - (xx2 - ));
if(xx1 < || xx2 < || yy1 < || yy2 < ) continue;
if(dp[xx1][xx2][(k - ) & ] == -INF) continue;
LL add = ;
if(x1 == x2 && y1 == y2) add = value[x1][y1];
else add = value[x1][y1] + value[x2][y2];
//printf("from (%d,%d) (%d,%d)\n",xx1,yy1,xx2,yy2);
dp[x1][x2][k & ] = max(dp[x1][x2][k & ],dp[xx1][xx2][(k - ) & ] + add);
}
//printf("maxvalue: %I64d\n",dp[x1][x2][k]);
}
}
}
LL ans = dp[n][n][( * n - ) & ];
printf("%I64d\n",ans);
}
return ;
} /*
3
0 10 -1
10 10 10
1 0 10
*/
ps:感谢fp大佬提供的数据
FZU 2234的更多相关文章
- FZU 2234 牧场物语【多线程dp】
Problem 2234 牧场物语 Problem Description 小茗同学正在玩牧场物语.该游戏的地图可看成一个边长为n的正方形. 小茗同学突然心血来潮要去砍树,然而,斧头在小茗的右下方 ...
- DP Training(Updating)
感觉前面做了那么多$dp$全是自己想的还是太少啊…… 好像在LZT的博客上看到了不错的资源?赶紧开坑,以一句话题解为主 Codeforces 419B 第一题就开始盗图 由于只有一个交点,手玩一下发现 ...
- FZU 2137 奇异字符串 后缀树组+RMQ
题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- FZU 2112 并查集、欧拉通路
原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- ACM: FZU 2102 Solve equation - 手速题
FZU 2102 Solve equation Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
随机推荐
- python_如何定义装饰器类?
案例: 实现一个能将函数调用信息记录到日志的装饰器 需求: 把每次函数的调用时间,执行时间,调用次数写入日志 可以对被装饰函数分组,调用信息记录到不同日志 动态修改参数,比如日志格式 动态打开关闭日志 ...
- python_改变字符串中文本格式?
案例: 某软件的日志文件,其中日期格式为year-moth-day: 2016-04-21 10:50:30 python 2014-05-22 10:50:30 python 2017-06-23 ...
- 错误:The request sent by the client was syntactically incorrect的解决
问题: 错误400-The request sent by the client was syntactically incorrect. springMVC中,某个页面提交时报400错误,如下图. ...
- libev-4.20编译安装及简单使用
1.源码下载地址: http://www.csdn.net/tag/libev/download 2.库的编译与安装 解压文件,进入文件目录 编译的时候需要首先切换为管理员(root)账户,然后执行以 ...
- Nginx Https配置不带www跳转www
把 morethink.cn和www.morethink.cn合并到一个server上去,使用301永久重定向. 然后将 https://morethink.cn 转到 https://www.mor ...
- Python函数可变参数*args及**kwargs详解
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...
- React原理探索- @providesModule 模块系统
@providesModule是什么 react抛出组件化的概念后,对于开发者而言,为了提高代码的可读性与结构性,通过文件目录结构去阐述组件嵌套关系无疑是一个很好的办法,但是目录级别的加深,同时让re ...
- 【STL】c++ priority_queue的使用方法
最开始在项目文档看到priority_queue这个模板时,还以为是自己定义的呢,后来查了一下,原来这是STL中存在的一种优先队列. 1.最简单的使用方法 std::priority_queue< ...
- Python数据结构之一——list(列表)
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ Python包含6种常见的内建序列.它们分别是列表.元祖.字符串.Unicode字符串.buffer(memory ...
- 使用DateTimeOffset 对xml中的日期时间格式时区进行处理
在日常使用中难免会与XML打交道,其中一个常用的格式就是日期了. 交互的时候通常有下面2种方式 DECLARE @Doc XML=' <R> <T>2018-02-22+08: ...