hdu1176 免费馅饼(dp)
来源:互联网 发布:苹果6无法加入网络 编辑:程序博客网 时间:2024/04/28 11:53
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1176
题目大意:中文题。
思路:对于这么一个问题,考虑dp。
可以令dp[i][j]为第i秒在j位置上获得的最大馅饼数量。
这样就可以写出状态转移方程:
dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1],dp[i-1][j+1]))+a[i][j];
就是对于前一秒在3个位置的判断,找出最大的。
#include<stdio.h>#include<string.h>int max(int a,int b){ if(a>b)return a; else return b;}int dp[100005][12],a[100005][12];int main(){ int n,x,T,i,j,k,maxi; while(scanf("%d",&n)!=EOF) { maxi=0; if(n==0)break; memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); for(i=1;i<=n;i++) { scanf("%d%d",&x,&T); a[T][x]++; maxi=max(maxi,T); //找到最长的时间 } for(i=1;i<=maxi;i++) { j=5-i; //因为刚开始是在5的位置,所以刚开始能涉及的范围比较小。 if(j<0)j=0; int ed=5+i; if(ed>10)ed=10; for(;j<=ed;j++) { if(j>0&&j<10) dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1],dp[i-1][j+1]))+a[i][j]; else if(j==0)dp[i][j]=max(dp[i-1][j],dp[i-1][j+1])+a[i][j]; else if(j==10)dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j]; } } int ma=0; for(i=0;i<=10;i++) { ma=max(ma,dp[maxi][i]);} //找到最后某个位置上的最大值 printf("%d\n",ma); } return 0;}
0 0
- hdu1176免费馅饼(dp)
- hdu1176 免费馅饼(dp)
- hdu1176免费馅饼 dp
- HDU1176:免费馅饼(DP)
- hdu1176免费馅饼(DP)
- HDU1176 免费馅饼 DP
- hdu1176免费馅饼(DP)
- hdu1176 免费馅饼--DP
- HDU1176 免费馅饼 DP
- 【DP】HDU1176免费馅饼
- hdu1176 免费馅饼 (dp)
- hdu1176免费馅饼 dp
- hdu1176 免费馅饼 DP
- hdu1176 免费馅饼(简单DP)
- HDU1176 免费馅饼(水DP)
- HDU1176免费馅饼(dp数塔)
- hdu1176 免费馅饼(数塔 dp)
- hdu1176—免费馅饼(dp)
- [LeetCode94]Binary Tree Inorder Traversal
- POI操作EXCEL(二)
- 修改tomcat的启动时间
- 你真的了解html嗎
- git使用记录
- hdu1176 免费馅饼(dp)
- 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
- swift详解之十九--------------UITableView的基本操作(下拉刷新,新增删除,分组,检索等)
- Linux系统的一些大疑问???
- C语言数组与指针详解
- Photon服务器引擎(一)Photon简介
- Hibernate缓冲策略 一
- 实例变量修饰符
- Timer定时任务与其缺陷