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的更多相关文章

  1. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  2. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  3. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  4. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  5. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

  6. 【51Nod 1622】【算法马拉松 19C】集合对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...

  7. 【51Nod 1616】【算法马拉松 19B】最小集合

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...

  8. 【51Nod 1674】【算法马拉松 19A】区间的价值 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...

  9. 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3

    先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...

随机推荐

  1. MongoDB进阶之路:不仅仅是技术研究,还有优化和最佳实践--转载

    摘要:MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 本文将从操作手册.技术研究.会议分享.场景应用等几个方面给大家推荐干货好文 ...

  2. Yii2 设计模式——单例模式

    单例模式 模式定义 单例模式确保一个类只有一个实例,并提供一个全局访问点.当现实中只需要一个对象,或者为了节省系统资源,又或者是为了共享数据的时候可以使用单例模式. 代码实现 我们先来看看单例模式的标 ...

  3. Django——关于项目开发遇到的一些小技巧

    目录 头像图片 js获取网站信息 js获取前端信息 Dj获取刚写入的数据的信息 js跳转新链接 头像图片对象的显示 在做到根据登陆ID决定用户头像的时候,加载静态文件的{% static ‘xxxxx ...

  4. 10分钟学会使用Markdown绘制UML时序图

    1.1 什么是Markdown? Markdown是一种语法特别少.特别简单的标记语言,用来编写文档.用Markdown编写的文档是纯文本格式,经过编辑器的渲染,就会形成排 版优美的文档,本文就是用M ...

  5. css之实现下拉框自上而下展开动画效果&&自下而上收起动画效果

    HTML代码: <div className={CX('font-size-selector-sub-list', { show: shouldSubListShow === true, hid ...

  6. PyCryptodome安装使用方法

    PyCryptodome是PyCrypto的一个分支.基于PyCrypto2.6.1,多了以下特性: Authenticated encryption modes (GCM, CCM, EAX, SI ...

  7. Tokitsukaze and Strange Rectangle CodeForces - 1191F (树状数组,计数)

    大意: 给定$n$个平面点, 定义集合$S(l,r,a)$表示横坐标$[l,r]$纵坐标$[a,\infty]$内的所有点. 求可以得到多少种不同的集合. 从上往下枚举底层最右侧点, 树状数组统计贡献 ...

  8. 第八讲,TLS表(线程局部存储)

    一丶复习线程相关知识 首先讲解TLS的时候,需要复习线程相关知识,  (thread local storage ) 1.了解经典同步问题 首先我们先写一段C++代码,开辟两个线程去跑,看看会不会出现 ...

  9. IIs发布的项目无法打开问题

    1/查看一下ISAPI筛选器,是否存在2.0,4.0,若缺少东西,就从新安装一下iis,存在某些程序没有被勾选,一般是asp.net3.5,asp.net4.0

  10. java 框架-模板引擎FreeMarker

    https://www.cnblogs.com/itdragon/p/7750903.html FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如 ...