luogu1006 【2008提高】传纸条(dp)
来源:互联网 发布:通达信软件编程 编辑:程序博客网 时间:2024/06/02 07:31
同方格取数,三维dp,注意一下边界就好了。详见方格取数博文。
#include <bits/stdc++.h>inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}inline int min(int x,int y){return x<y?x:y;}inline int max(int x,int y){return x>y?x:y;}#define N 52int f[N<<1][N][N],n,m,a[N][N];int main(){// freopen("a.in","r",stdin); m=read();n=read();m--;n--; for(int i=0;i<=m;++i) for(int j=0;j<=n;++j) a[i][j]=read(); memset(f,128,sizeof(f));f[0][0][0]=0; for(int i=1;i<=n+m;++i) for(int j=0;j<=m&&j<=i;++j) for(int k=0;k<=m&&k<=i;++k){ f[i][j][k]=max(max(f[i-1][j][k],f[i-1][j][k-1>0?k-1:0]),max(f[i-1][j-1>0?j-1:0][k],f[i-1][j-1>0?j-1:0][k-1>0?k-1:0])); f[i][j][k]+=a[j][i-j]; if(j!=k) f[i][j][k]+=a[k][i-k]; } printf("%d\n",f[n+m][m][m]); return 0; }
阅读全文
0 0
- luogu1006 【2008提高】传纸条(dp)
- 【NOIP 2008 提高组 T3】传纸条(DP)
- 【双向dp】NOIP提高组2008传纸条
- 传纸条(一) DP
- P1006 传纸条(dp)
- [DP]2008年分区联赛提高组第三题 传纸条
- wikioi-天梯-提高一等-棋盘dp-1169:传纸条
- 2008年NOIP提高组 传纸条
- <棋盘型DP> noip 2008 传纸条
- NYOJ - 传纸条(一)(DP)
- 蓝桥杯 - 传纸条 (双线程DP)
- nyoj61 传纸条(一) dp
- NYOJ61 传纸条(一)(双线dp)
- NYOJ 传纸条(一) 双向dp
- 【DP】[NOIP2008]传纸条
- wiki1169-传纸条(dp)
- voj1493 传纸条 dp
- DP - 传纸条
- JAVA内部类
- 系统计数器与硬件分析
- 拷贝控制函数
- 计算指定时间与当前的时间差 比如,3天前、10分钟前
- zzuli 2179 紧急营救【最短路+思维】
- luogu1006 【2008提高】传纸条(dp)
- Spring 动态代理分析&AOP的XML的方式&注解方式
- python尝试从通联数据爬取信息并保存在mongodb数据库中
- c#设计模式之开放封闭原则
- JS数据类型、类型转换
- Java架构师必看的10本书
- turn.js学习手册
- POJ 2352 Stars (线段树)
- 虚拟内存