*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]内的概率 连续形的概率 假 ...
随机推荐
- Eclipse一些技巧
1:测试某个测试溢出,修改堆内存大小 // 模拟内存溢出 -Xms10m -Xmx10m private static void mockOOM() { List list = new ArrayLi ...
- asp.net core-5.控制台读取json文件
1,创建控制台应用程序,应用using Microsoft.Extensions.Configuration; 2,新建一个app.json文件 然后修改app.json的属性 3,生成项目,可以看到 ...
- CSS之cursor用法
cursor: url('~ROOT/shared/assets/image/vn-text-cursor-31-49.png') 22 22, nw-resize; 另外还有一个 cursor: g ...
- IDEA中通过Maven插件使用MyBatis Generator
这样做更简单,参考: IDEA集成MyBatis Generator 插件 详解
- JS基础_构造函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 校验用户名是否存在(ajax+jackson)
只是简单的仿某度注册的用户名输入离焦后检验 目录结构 没有涉及到数据库 html <!DOCTYPE html> <html lang="en"> < ...
- Go part 1 初探
Go 语言简介 Go 语言是 Google 在2007年开发的一种开源编程语言,于2009年11月10日向全球公布 出自 Ken Thompson 和 Rob Pike.Robert Grieseme ...
- 百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324
Android应用使用百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324 在使用百度定位SDK时遇到一个非常郁闷的问 ...
- 【vue开发】vue指令Vue.directive使用教程
1.指令的注册 指令跟组件一样需要注册才能使用,同样有两种方式,一种是全局注册: ? 1 2 3 4 5 Vue.directive('dirName',function(){ //定义指令 ...
- dockerfile构建nginx
mkdir docker_demo cd docker_demo wget http://nginx.org/download/nginx-1.2.9.tar.gz vim Dockerfile FR ...