*51nod 1409
https://blog.csdn.net/stay_accept/article/details/81476358
不懂啊
#include <map>
#include <queue>
#include <string>
#include <math.h>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
inline bool scan_d(int &num) {
char in;
bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<''||in>'')) in=getchar();
if(in=='-') {
IsN=true;
num=;
} else num=in-'';
while(in=getchar(),in>=''&&in<='') {
num*=,num+=in-'';
}
if(IsN) num=-num;
return true;
}
const int siz=;
int a[siz][siz];
long long g[siz],dp[][siz][];
int main() {
long long ans;
int n,m,i,j,k,x,y,op;
while(scanf("%d%d",&n,&m)!=EOF) { //dp[i][j][k]表示到dii列第j行向上走还是向下走
for(i=; i<=n; i++)
for(j=; j<=m; j++)
scan_d(a[i][j]);
for(i=; i<=n; i++)
dp[][i][]=dp[][i][]=;
for(i=; i<=m; i++) {
x=i&,y=-(i&);
for(j=; j<=n; j++)
dp[x][j][]=dp[x][j][]=-;
dp[x][][]=dp[x][][]=;
dp[x][n+][]=dp[x][n+][]=;
for(j=; j<=n; j++) {
if(a[j][i]==-)
continue;
for(k=; k<=; k++) {
if(dp[y][j][k]!=-)
dp[x][j][]=max(dp[x][j][],dp[y][j][k]+a[j][i]);
if(dp[y][j][k]!=-)
dp[x][j][]=max(dp[x][j][],dp[y][j][k]+a[j][i]);
}
} //先算出从前一列过来的得分
for(j=; j<=n; j++) {
if(dp[x][j-][]!=-&&a[j][i]!=-)
dp[x][j][]=max(dp[x][j][],dp[x][j-][]+a[j][i]);
} //然后本列进行转移
for(j=; j<=n; j++)
g[j]=-;
g[]=;
if(dp[x][n][]!=-) { //算出经过传送门的得分
op=n; //想下走就找尽可能往下更新的点
while(op>) {
if(dp[x][op][]==dp[x][op-][]+a[op][i]&&dp[x][op-][]!=-)
op--;
else
break;
}
for(j=; j<op; j++) {
if(a[j][i]==-)
break;
g[j]=g[j-]+a[j][i];
}
} //往上走跟往下走是一样的思路
for(j=; j<n; j++)
dp[x][j][]=max(dp[x][j][],g[j]);
for(j=n-; j>=; j--) {
if(dp[x][j+][]!=-&&a[j][i]!=-)
dp[x][j][]=max(dp[x][j][],dp[x][j+][]+a[j][i]);
}
for(j=; j<=n; j++)
g[j]=-;
g[n+]=;
if(dp[x][][]!=-) {
op=;
while(op<n) {
if(dp[x][op][]==dp[x][op+][]+a[op][i]&&dp[x][op+][]!=-)
op++;
else
break;
}
for(j=n; j>op; j--) {
if(a[j][i]==-)
break;
g[j]=g[j+]+a[j][i];
}
}
for(j=n; j>; j--)
dp[x][j][]=max(dp[x][j][],g[j]);
}
ans=-;
for(i=; i<=n; i++)
ans=max(ans,max(dp[m&][i][],dp[m&][i][]));
printf("%I64d\n",ans);
}
return ;
}
*51nod 1409的更多相关文章
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
- 【51Nod 1674】【算法马拉松 19A】区间的价值 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...
- 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...
随机推荐
- Yii2.0 RESTful API 之速率限制
Yii2.0 RESTFul API 之速率限制 什么是速率限制? 权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流. 例如,您可以限制每个用户 10 分钟内最多调用 API 100 ...
- element-ui 合并单元格的方法
arraySpanMethod({ row, column, rowIndex, columnIndex }) { // 只合并区域位置 //columnIndex 横的第一列 ...
- [javascript]原生js实现Ajax
一.首先看JQuery提供的Ajax方法: $.ajax({ url: , type: '', dataType: '', data: { }, success: function(){ }, err ...
- (十一)shiro与ssm整合
所有代码在:here pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...
- c#基于TCP/IP、CIP协议的欧姆龙PLC通信
一.关于CIP协议 CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连 ...
- Centos7 配置 svn服务端
转载至:Linux(阿里云Centos7)环境下搭建svn服务器以及权限配置详细步骤 本篇文章主要介绍在CentOS7中采用yum安装方式.优点:简单,一键安装,不用手动配置环境变量等.缺点:安装位置 ...
- MVC模板页使用
这里我们要做一个公共的模板,样式如下: 内容 ·asp.net mvc如何创建模板??1.在/Views/Shared/中右键-添加-视图 2.重命名为”HeadLayout”,勾选”创建为分部视图” ...
- Point to class member
#include <iostream> using namespace std; class Student { public: Student(string n, int nu):nam ...
- JS实现数组去重(重复元素保留一个)
1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5, ...
- 第三方应用如何在SAP Kyma上进行服务注册
Jerry之前的公众号文章 什么?在SAP中国研究院里还需要会PHP开发?提到了一个SAP Kyma的应用场景: 旅行兼社交达人伊森,使用经过SAP Kyma扩展之后的WordPress这个网站来写博 ...