hdu 1176 馅饼 解题报告
2015-07-28 00:01
316 查看
题意是获得馅饼最多,将其转化为数塔模型,即可轻松解决scanf("%d%d",&x,&T);dp[T][x]++;
以时间为高,点为宽的数塔建立
然后从最后一行往上走即可,为什么dp[0][5]一定是最大的呢,因为刚开始是在5,所以第一行只有一个,其他全为0
00000500000
00004040000
00030003000
。。。。反正最后传上去,5为 最大,当然d[0][4],也可能是最大,之类的
代码:
以时间为高,点为宽的数塔建立
然后从最后一行往上走即可,为什么dp[0][5]一定是最大的呢,因为刚开始是在5,所以第一行只有一个,其他全为0
00000500000
00004040000
00030003000
。。。。反正最后传上去,5为 最大,当然d[0][4],也可能是最大,之类的
代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int dp[100001][11]; int max3(int a,int b,int c) { a = a>b?a:b; a = a>c?a:c; return a; } int max2(int a,int b) { a = a>b?a:b; return a; } int main() { int n,max,x,T; while(scanf("%d",&n)&&n) { memset(dp,0,sizeof dp); max=0;//最大的时间 while(n--) { scanf("%d %d",&x,&T); dp[T][x]++; max = max>T?max:T; } for(int i=max-1;i>=0;i--) { for(int j=0;j<=10;j++) { if(j==0)dp[i][j]+=max2(dp[i+1][j],dp[i+1][j+1]); else if(j==10)dp[i][j]+=max2(dp[i+1][j],dp[i+1][j-1]); else dp[i][j]+=max3(dp[i+1][j],dp[i+1][j-1],dp[i+1][j+1]); } } cout<<dp[0][5]<<endl; } return 0; }
相关文章推荐
- 大数据系列修炼-Scala课程03
- 什么牌子的家用净水器好?
- JS~jwPlayer为js预留的回调方法大总结
- 开源框架Pushlet入门_java_web
- 月薪3K也可以理财 工薪阶层如何玩转P2P
- 四季电台应用项目源码
- 类似material design的电影应用源码
- EarthWarrior3D游戏ios源码
- 基于keepalived双主模型的高可用LVS
- java 数据结构之 链式存储结构 栈
- json2解决ie7缺json对象
- java学习——IO
- java学习——日期
- 音乐的魅力无处不在,说你的声音世界
- Nginx master工作流程
- 贴个模板,POJ 1511
- 【Android 多语言切换简单实例分享】
- java获取本地操作系统进程列表
- Stringbuffer StringBuilder String
- 快速打开Oracle Listener以及OracleService的方法