题目为中文,题意略。

这个题目我开始用贪心做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的更多相关文章

  1. FZU 2234 牧场物语【多线程dp】

     Problem 2234 牧场物语  Problem Description 小茗同学正在玩牧场物语.该游戏的地图可看成一个边长为n的正方形. 小茗同学突然心血来潮要去砍树,然而,斧头在小茗的右下方 ...

  2. DP Training(Updating)

    感觉前面做了那么多$dp$全是自己想的还是太少啊…… 好像在LZT的博客上看到了不错的资源?赶紧开坑,以一句话题解为主 Codeforces 419B 第一题就开始盗图 由于只有一个交点,手玩一下发现 ...

  3. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

  4. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  5. ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】

     FZU 2105  Digits Count Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  6. FZU 2112 并查集、欧拉通路

    原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...

  7. ACM: FZU 2107 Hua Rong Dao - DFS - 暴力

    FZU 2107 Hua Rong Dao Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  8. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  9. ACM: FZU 2102 Solve equation - 手速题

     FZU 2102   Solve equation Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

随机推荐

  1. freemarker常用值格式化方法

    freemarker常用的值格式化方法: 1.${price?string('0.00')} 对price进行格式化,小数点后不足2位用0补足. 比如:price=1 输出:1.00 2.${pric ...

  2. mysql关于char和varchar的查询效率问题

    看了好多资料都说 varchar(size) 可变长度的字符值,节省空间,查询效率低 char(size) 固定长度的字符值,浪费空间,查询效率高 但是实际测试  char(100)   varcha ...

  3. MySQL备份利器-xtrabackup的介绍和原理(附脑图)

    标签(linux): mysql-xtrabackup 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 xtrabackup是Percona公司针对mysql数据 ...

  4. 企业级Docker私有仓库部署(https)

    部署环境 Centos7.3 x64 docker-ce-17.06.0 docker-compose-1.15.0 Python-2.7.5(系统默认) 部署目标 使用HTTPS协议 支持Clair ...

  5. JavaWeb项目架构之Kafka分布式日志队列

    架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了. kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由S ...

  6. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

    什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...

  7. tf.train.shuffle_batch函数解析

    tf.train.shuffle_batch (tensor_list, batch_size, capacity, min_after_dequeue, num_threads=1, seed=No ...

  8. 02_Linux图形界面及文件系统结构介绍

    一.根目录 /       : 它跟Windows的C.D.E.F不同,在Linux中,所有的文件系统(光驱.U盘.硬盘)都挂载到根目录的某一个文件夹下 bin   : 存放二进制可执行文件 sbin ...

  9. 01_Linux安装

    一.VMware创建一个虚拟机 下一步   .下一步  .下一步 ..前方高能 二.安装CentOS 6.7 next  ->  选择 中文简体  -> 美式键盘,直接下一步  ,一直下一 ...

  10. wireshark抓包图解 TCP三次握手/四次挥手详解[转]

    原文链接:http://www.seanyxie.com/wireshark%E6%8A%93%E5%8C%85%E5%9B%BE%E8%A7%A3-tcp%E4%B8%89%E6%AC%A1%E6% ...