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 & ...
随机推荐
- PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores并导入数据库中
需求:定期自动获取Vm在VCenter中对应的cluster.ESX.Datastore信息,同时将变化或者新增的数据上传到数据库中 解决思路分析: 1 首先使用VMware的powerCLI工具通过 ...
- 获取android手机屏幕的宽高、density
public static String getDisplayMetrics(Context cx) { String str = ""; DisplayMetrics dm = ...
- 长整形 Unix系统毫秒时间 (long类型) 转换为时间格式
/** * 把毫秒转化成日期 * * @param dateFormat(日期格式,例如:MM/ dd/yyyy HH:mm:ss) * @param millSec(毫秒数) * @return * ...
- 使用keepAlive对上下拉刷新列表数据 和 滚动位置细节处理 - vue
[前言] 使用vue处理项目中遇到列表页面时,之前项目中总会有一些细节问题处理得不太好,这里总结一下,以便优化以后的代码.如下: 1. 使用mint-ui中的LoadMore组件上下拉刷新时,有时无法 ...
- shell中awk printf的用法
打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...
- Linux时间转标准时间
[root@nhserver2 ~]# date -d '1970-1-1 0:0:0 GMT + 1394592071 seconds'Wed Mar 12 10:41:11 CST 2014
- HTTP就是这么简单
为什么要学HTTP? 我们绝大多数的Web应用都是基于HTTP来进行开发的.我们对Web的操作都是通过HTTP协议来进行传输数据的. 简单来说,HTTP协议就是客户端和服务器交互的一种通迅的格式. H ...
- 史上最全的JFinal源码分析(不间断更新)
打算 开始 写 这么 一个系列,希望 大家 喜欢,学习 本来就是 一个查漏补缺的过程,希望大家能提出建议.本篇 文章 是整个目录的向导,希望 大家 喜欢.本文 将以 包的形式跟大家做向导. Handl ...
- ABP官方文档翻译 2.6 定时
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...
- select、poll、epoll之间的区别总结[转]
原文链接:http://www.cnblogs.com/Anker/p/3265058.html select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多 ...