题目为中文,题意略。

这个题目我开始用贪心做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. 2017-07-10(lastlog rpm yum)

    lastlog 查看所有用户最后一次登录的时间 rpm www.rpmfind.net   用来确认函数库需要安装哪个依赖程序的的网站 rpm -ivh  包全名 (安装) rpm -Uvh 包全名( ...

  2. python_如何通过twisted实现数据库异步插入?

    如何通过twisted实现数据库异步插入? 1. 导入adbapi 2. 生成数据库连接池 3. 执行数据数据库插入操作 4. 打印错误信息,并排错 #!/usr/bin/python3 __auth ...

  3. Linux安装ffmpeg

      1.安装ffmpeg 简单步骤: A.首先去官网下载源码包,我的是ffmpeg-3.4.tar.bz2,下载之后上传至Linux准备安装,首先解压安装包: tar -xjvf ffmpeg-3.4 ...

  4. 验证码 jsp

    验证码的jsp实现 <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,j ...

  5. RChain节点通信机制(上)

    在介绍RChain的通信机制之前,先简单介绍一些以太坊的通信机制,它包括以下几个方面,如下详细了解以太坊的通信机制,可以查看https://github.com/ethereum/devp2p/blo ...

  6. strcpy和memcpy

    切记,memcpy的头文件是memory.hstrcpy和memcpy主要有以下3方面的区别.1.复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组.整型.结构体 ...

  7. ASP.NET Core 2.0 : 一. 概述

    为什么要使用 ASP.NET Core? .NET Core 刚发布的时候根据介绍就有点心里痒痒, 大概看了一下没敢付诸于行动,  现在2.0发布了一段时间了, 之前对其"不稳定" ...

  8. OpenStreetMap数据清洗(SQL&MonogoDB版本)

    目标:通过网上下载的OpenStreetMap.xml数据格式,将该文件的格式进行统计,清洗,并导出成CSV格式的文件,最后倒入到SQLite中 本案例中所需的包 import csv import ...

  9. 二维数组int[3][2]在内存中的分布方式

  10. Windows系统安装pip方法

    pip是一款非常方便的python包管理工具,本文主要介绍在windows 10系统下安装pip方法. 1. 下载pip 地址:https://pypi.python.org/pypi/pip#dow ...