codeforces.com/problemset/problem/213/C
虽然一开始就觉得从右下角左上角直接dp2次是不行的,后面还是这么写了WA了
两次最大的并不一定是最大的,这个虽然一眼就能看出,第一次可能会影响第二次让第二次太小。
这是原因。
5
4 32 1 18 41
47 38 7 43 43
48 23 39 40 23
26 39 33 5 36
31 29 7 26 47
这组数据是结果。
走完第一遍成
0 32 1 18 41
0 38 7 43 43
0 0 0 0 0
26 39 33 5 0
31 29 7 26 0
这样倒着走回去一定会经过0导致第二遍小很多。
正确走法
5
0 32 1 18 41
0 38 7 43 43
0 23 39 40 23
0 0 0 5 36
31 29 0 0 0
然后
5
0 0 1 18 41
0 0 7 43 43
0 0 0 0 0
0 0 0 5 0
31 29 0 0 0
这样和为508比两次取最大的482还大。
完全想不到怎么弄了。上一次求两次和最短路的走过了后就不能走,也想成两次跑最小,也是跪,结果应该用最小费用流。

这个也是没发现,不管怎么走一定每次确定步数后都会在同一条对角线上。
所以可以一条对角线一条一条的推。然而要同时确定两条路,走过去再走回来就等于走过去两条路,经过同一个点的时候只取一次。
dp[d][i][j]表示到第d条对角线时第一条路在i行,第二条路在j行最大的和能取多大,一路推到最后,这里可以用滚动数组dp内存就只有n*n了。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 305;
const ll mod = 1e9 + 7;
const double eps = 1e-12;
int a[N][N];
int dp[2][N][N];
int main() {
int n;cin >> n;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= n;j++)
cin >> a[i][j];
memset(dp, -2, sizeof dp);
dp[1][1][1] = a[1][1];
int now = 1;
for (int d = 2;d < n + n;d++) {
now ^= 1;
for (int i = max(1,d-n+1);i <= min(n,d);i++)
for (int j = max(1,d-n+1);j <= min(n,d);j++) {
for (int x = i - 1;x <= i;x++) {
for (int y = j - 1;y <= j;y++) {
if (x >= max(1, d - n) && x <= min(n, d - 1) && y >= max(1,d - n) && y <= min(n, d - 1)) {
int val = a[i][d - i + 1] + a[j][d - j + 1];
if (i == j)val /= 2;
dp[now][i][j] = max(dp[now][i][j], dp[now ^ 1][x][y] + val);
}
}
}
}
for (int i = 0;i <= n;i++)
for (int j = 0;j <= n;j++)dp[now ^ 1][i][j] = -1000000000;
}
cout << dp[now][n][n];
return 0;
}
codeforces.com/problemset/problem/213/C的更多相关文章
- http://codeforces.com/problemset/problem/594/A
A. Warrior and Archer time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- http://codeforces.com/problemset/problem/712/D
D. Memory and Scores time limit per test 2 seconds memory limit per test 512 megabytes input standar ...
- http://codeforces.com/problemset/problem/847/E
E. Packmen time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- http://codeforces.com/problemset/problem/545/D
D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- codeforces 340C Tourist Problem
link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...
- codeforces B. Routine Problem 解题报告
题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...
- Codeforces 527D Clique Problem
http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...
- Codeforces 706C - Hard problem - [DP]
题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...
- Codeforces 1096D - Easy Problem - [DP]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
随机推荐
- toast 防止一直不停弹出,累积显示
private Toast mToast = null; public void showTextToast(String msg) { if (mToast == null) { mToast = ...
- 【转】设计模式(三)建造者模式Builder(创建型)
(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对 ...
- 【转】C# HttpWebRequest\HttpWebResponse\WebClient发送请求解析json数据
http://blog.csdn.net/kingcruel/article/details/44036871 版权声明:本文为博主原创文章,未经博主允许不得转载. ================= ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- JMX初体验
这些天在看<How Tomcat Works>这本书.里面讲到了JMX的内容.对我来说是个新知识点. JMX--Java Management Extensions,即Java管理扩展,是 ...
- VB的判断语句和循环语句
判断语句 •If语句 if语句共有4种写法: 第一种语法: If 条件判断语句 then 程序代码 第二种语法:If 条件判断语句 then 程序代码 else 程式代码 第三种语法: If 条件 ...
- JQuery通过$(xxx...)返回对象
var JQ = function () { return new JQ.prototype.init(); }; JQ.prototype.init = function () { }; JQ.pr ...
- 在CentOS6.5上安装Tomcat7
Tomcat大本营地址:http://tomcat.apache.org/ 本文使用到的Tomcat7下载地址:http://apache.opencas.org/tomcat/tomcat-7/v7 ...
- 如何在 Linux 中清除缓存(Cache)
如何在 Linux 中清除缓存(Cache) 方法一: http://mp.weixin.qq.com/s?__biz=MjM5ODAzODgyMQ==&am ...
- ssh secure shell client
登陆方式和putty一样