网上说这道题的题解是费用流

我粗粗看了一下数据范围,觉得出题者似乎是让我们用 “大(d)屁(p)” 的样子,为了尊重出题人,我还是写一写吧喵~

首先,一条回路可以看做是两条路齐头并进,这是 大屁 和 费永柳 的共同思想

故我们可用一条条次对角线(即 x+y=k  的对角线)来划分状态

考虑枚举对角线上两个点 x1,y1,x2,y2
很大力地用 f[x1][y1][x2][y2] 表示两条路分别走到 点(x1, y1)和 点(x2, y2)时的最佳方案

这样 f[x1][y1][x2][y2] 就可以由 f[x1-1][y1][x2-1][y2], f[x1-1][y1][x2][y2-1], f[x1][y1-1][x2-1][y2], f[x1][y1-1][x2][y2-1] 来得到(丧心病狂)

还有当 点(x1, y1)和 点(x2, y2)在对角线上相邻时情况特殊,因为 点(x1-1, y1)和 点(x2, y2-1)重合了,需要特别考虑(真是丧心病狂)

虽然看上去很恶心,但我觉得再怎么说短也是一大优势,你的费用流有这么短喵?

#include <cstdio>
#include <cstring>
#define max(x, y) ((x)>(y) ? (x):(y))
const int size=32; int n;
int a[size][size];
int f[size][size][size][size];
inline int getint();
inline void putint(int); int main()
{
while (scanf("%d", &n)!=EOF)
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
a[i][j]=getint();
memset(f, 0, sizeof f);
f[2][1][1][2]=a[1][1]+a[1][2]+a[2][1];
for (int i=4;i<2*n;i++)
for (int y1=i<=n+1?1:i-n;y1<i-1 && y1<n;y1++)
for (int y2=y1+1;y2<i && y2<=n;y2++)
{
int x1=i-y1, x2=i-y2;
if (y2-y1==1) f[x1][y1][x2][y2]=max(max(f[x1][y1-1][x2][y1], f[x2][y1][x2-1][y2]), f[x1][y1-1][x2-1][y2]);
else f[x1][y1][x2][y2]=max(max(f[x1-1][y1][x2-1][y2], f[x1-1][y1][x2][y2-1]), max(f[x1][y1-1][x2-1][y2], f[x1][y1-1][x2][y2-1]));
f[x1][y1][x2][y2]+=a[x1][y1]+a[x2][y2];
}
putint(a[n][n]+f[n][n-1][n-1][n]);
} return 0;
}
inline int getint()
{
register int num=0;
register char ch;
do ch=getchar(); while (ch<'0' || ch>'9');
do num=num*10+ch-'0', ch=getchar(); while (ch>='0' && ch<='9');
return num;
}
inline void putint(int num)
{
char stack[15];
register int top=0;
for ( ;num;num/=10) stack[++top]=num%10+'0';
for ( ;top;top--) putchar(stack[top]);
putchar('\n');
}

[hdu 2686]Matrix的更多相关文章

  1. HDU 2686 Matrix 3376 Matrix Again(费用流)

    HDU 2686 Matrix 题目链接 3376 Matrix Again 题目链接 题意:这两题是一样的,仅仅是数据范围不一样,都是一个矩阵,从左上角走到右下角在从右下角走到左上角能得到最大价值 ...

  2. hdu 2686 Matrix 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...

  3. HDU 2686 Matrix 多线程dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 思路:多线程dp,参考51Nod 1084:http://www.51nod.com/onlin ...

  4. HDU 2686 Matrix(最大费用最大流+拆点)

    题目链接:pid=2686">http://acm.hdu.edu.cn/showproblem.php?pid=2686 和POJ3422一样 删掉K把汇点与源点的容量改为2(由于有 ...

  5. HDU 2686 Matrix(最大费用流)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. hdu 2686 Matrix && hdu 3367 Matrix Again (最大费用最大流)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. POJ 2135 Farm Tour &amp;&amp; HDU 2686 Matrix &amp;&amp; HDU 3376 Matrix Again 费用流求来回最短路

    累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...

  8. HDU 4920 Matrix multiplication(bitset)

    HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...

  9. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

随机推荐

  1. 关于 RxJava 技术介绍

    Awesome-RxJava RxJava resources Blog 给 Android 开发者的 RxJava 详解 -强烈推荐 扔物线的文章 讲解非常详细 NotRxJava懒人专用指南 -这 ...

  2. Spring <bean> 参数意义

    1.id bean的唯一标识, 2.class 类的完全限定名, 3.parent 父类bean定义的名字. 如果没有任何声明,会使用父bean,但是也可以重写父类.重写父类时,子bean 必须与父b ...

  3. SpringMVC -- 梗概--壹

    1.springMVC:MVC开源框架 2.springMVC开发流程: 2.1 导包: 2.2 配置前端控制器(核心) DispatcherServlet <servlet> <s ...

  4. Java 编程入门(词汇表)

    抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...

  5. JDK配置

    一.下载和安装 二.配置环境变量 1.计算机→属性→高级系统设置→高级→环境变量 2.系统变量→新建JAVA_HOME,值为jdk的安装目录(如C:\Java\jdk1.7.0) 3.系统变量→修改P ...

  6. hdu 5876 ACM/ICPC Dalian Online 1009 Sparse Graph

    题目链接 分析:这叫补图上的BFS,萌新第一次遇到= =.方法很简单,看了别人的代码后,自己也学会了.方法就是开两个集合,一个A表示在下一次bfs中能够到达的点,另一个B就是下一次bfs中到不了的点. ...

  7. 给一个div绝对定位后,如何让它水平居中

    <style> .footer{position:absolute;left:0;right:0} </style> <div classs="footer&q ...

  8. NET中的规范标准注释(二) -- 创建帮助文档入门篇

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. 二.背景 要生成帮助文 ...

  9. 1095: [ZJOI2007]Hide 捉迷藏

    题意:给定一棵树,每个节点可以变成黑白两色.一开始所有节点都是黑色,操作可将点颜色改变,询问当前情况下距离最远的两个黑点的距离. 动态树分治.一开始想的是对于每个节点维护主大和次大,后来发现这实在是太 ...

  10. AFN实现多图片上传的方法

    [[AFAppDotNetAPIClient sharedClient] POST:path parameters:dic constructingBodyWithBlock:^(id<AFMu ...