hdu 1176 免费馅饼 dp
来源:互联网 发布:linux apache cgi 编辑:程序博客网 时间:2024/06/05 05:53
题目链接
思路:
本人也是刚接触dp,所以这个题用了两种方法,但是一种方法当时发现测试数据好像有点水,我自己举了一个样例不对竟然给我ac了 然后又自己改了一下...
像这样起点位置确定了而末位置不确定的我们从后往前倒着dp,这样以便确定最优解,
转移方程为 dp[i][j]+=max(dp[i+1][j],max(dp[i+1][j-1],dp[i+1][j+1])); 处理好边界
#include<bits/stdc++.h>#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 100000007using namespace std;typedef long long ll;const int maxn=1e5+10;int dp[maxn][20];int n,pos,t;int maxt; int main(){while(~Ri(n)){if(n==0)break;CLR(dp,0);maxt=-1;for(int i=1;i<=n;i++){Ri(pos),Ri(t);dp[t][pos]++;maxt=max(t,maxt);}for(int i=maxt-1;i>=0;i--){for(int j=0;j<=10;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]));else if(j==0)dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);elsedp[i][j]+=max(dp[i+1][j],dp[i+1][j-1]);}}Pi(dp[0][5]);}return 0;}
如果从起始位置开始的话需要注意由于刚开始只能从5这个起点开始,需要特别处理一下;
#include<bits/stdc++.h>#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 100000007using namespace std;typedef long long ll;const int maxn=1e5+10;int dp[maxn][20];int n,pos,t;int maxt; int main(){while(~Ri(n)){if(n==0)break;CLR(dp,0);maxt=-1;for(int i=1;i<=n;i++){Ri(pos),Ri(t);if(t==1&&pos>=4&&pos<=6)//起始特别处理dp[t][pos]++;else if(t!=1)dp[t][pos]++;maxt=max(t,maxt);}for(int i=2;i<=maxt;i++){for(int j=0;j<=10;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]));else if(j==0)dp[i][j]+=max(dp[i-1][j],dp[i-1][j+1]);elsedp[i][j]+=max(dp[i-1][j],dp[i-1][j-1]);}}int ans=-1;for(int i=0;i<=10;i++)ans=max(ans,dp[maxt][i]);Pi(ans);}return 0;}
0 0
- hdu 1176免费馅饼 //dp
- HDU 1176 DP 免费馅饼
- hdu 1176 免费馅饼 (dp)
- hdu 1176 免费馅饼 dp
- hdu 1176 免费馅饼 dp
- HDU 1176 免费馅饼 DP
- HDU 1176 免费馅饼(dp)
- HDU 1176 免费馅饼 (DP)
- 免费馅饼 - HDU 1176 dp
- HDU 1176 免费馅饼(DP)
- [HDU 1176]免费馅饼(DP)
- HDU 1176 免费馅饼(DP)
- HDU - 1176 免费馅饼(DP)
- HDU 1176 免费馅饼(DP)
- hdu 1176 免费馅饼(DP)
- HDU 1176 免费馅饼(DP)
- HDU 1176 免费馅饼 dp
- HDU 1176 免费馅饼【dp】
- php 判断操作系统位数
- C语言实现汉诺塔
- The language of learning
- kali漏洞利用之BeeF
- 安装Python
- hdu 1176 免费馅饼 dp
- 设计模式--策略模式Strategy
- NYOJ -216 A problem is easy
- 4月22日,Stacks,每日20行。
- 剑指offer-面试题 17:合并两个排序的链表
- Hibernate总结要点
- 信息资源管理总结篇
- 测试
- centos6 安装完成后是英文界面,如何更改成中文界面