*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]内的概率 连续形的概率 假 ...
随机推荐
- MongoDB进阶之路:不仅仅是技术研究,还有优化和最佳实践--转载
摘要:MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 本文将从操作手册.技术研究.会议分享.场景应用等几个方面给大家推荐干货好文 ...
- Yii2 设计模式——单例模式
单例模式 模式定义 单例模式确保一个类只有一个实例,并提供一个全局访问点.当现实中只需要一个对象,或者为了节省系统资源,又或者是为了共享数据的时候可以使用单例模式. 代码实现 我们先来看看单例模式的标 ...
- Django——关于项目开发遇到的一些小技巧
目录 头像图片 js获取网站信息 js获取前端信息 Dj获取刚写入的数据的信息 js跳转新链接 头像图片对象的显示 在做到根据登陆ID决定用户头像的时候,加载静态文件的{% static ‘xxxxx ...
- 10分钟学会使用Markdown绘制UML时序图
1.1 什么是Markdown? Markdown是一种语法特别少.特别简单的标记语言,用来编写文档.用Markdown编写的文档是纯文本格式,经过编辑器的渲染,就会形成排 版优美的文档,本文就是用M ...
- css之实现下拉框自上而下展开动画效果&&自下而上收起动画效果
HTML代码: <div className={CX('font-size-selector-sub-list', { show: shouldSubListShow === true, hid ...
- PyCryptodome安装使用方法
PyCryptodome是PyCrypto的一个分支.基于PyCrypto2.6.1,多了以下特性: Authenticated encryption modes (GCM, CCM, EAX, SI ...
- Tokitsukaze and Strange Rectangle CodeForces - 1191F (树状数组,计数)
大意: 给定$n$个平面点, 定义集合$S(l,r,a)$表示横坐标$[l,r]$纵坐标$[a,\infty]$内的所有点. 求可以得到多少种不同的集合. 从上往下枚举底层最右侧点, 树状数组统计贡献 ...
- 第八讲,TLS表(线程局部存储)
一丶复习线程相关知识 首先讲解TLS的时候,需要复习线程相关知识, (thread local storage ) 1.了解经典同步问题 首先我们先写一段C++代码,开辟两个线程去跑,看看会不会出现 ...
- IIs发布的项目无法打开问题
1/查看一下ISAPI筛选器,是否存在2.0,4.0,若缺少东西,就从新安装一下iis,存在某些程序没有被勾选,一般是asp.net3.5,asp.net4.0
- java 框架-模板引擎FreeMarker
https://www.cnblogs.com/itdragon/p/7750903.html FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如 ...