hdu-1176(dp)
生活随笔
收集整理的這篇文章主要介紹了
hdu-1176(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解題思路:用dp做的,dp[i][j]表示在i時刻,j點的最大餡餅。a[i][j]表示在i這個時刻j點同時掉落的餡餅;
每個點除了0和10之外,都有三種狀態;
1、沒有移動,這樣值就為dp[i][j]=max(dp[i][j],dp[i-1][j]+a[i][j]);
2、從左邊移動來的,dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a[i][j]);
3、從右邊移動來的,dp[i][j]=max(dp[i][j],dp[i-1][j+1]+a[i][j]);
初始化dp[i][j]=-1;dp[0][5]=0;本身在5這個點;
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define maxn 100005 using namespace std; int dp[maxn][12]; int a[maxn][12]; int n; int main() {int x,t;while(scanf("%d",&n)!=EOF){if(n==0)return 0;memset(dp,-1,sizeof(dp));memset(a,0,sizeof(a));while(n--){scanf("%d%d",&x,&t);a[t][x]++;}int ans=-888;dp[0][5]=0;for(int i=1;i<=100000;i++)//時間;{for(int j=0;j<=10;j++)//地點;{if(dp[i-1][j]!=-1)dp[i][j]=max(dp[i][j],dp[i-1][j]+a[i][j]);if(j!=0&&dp[i-1][j-1]!=-1)dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a[i][j]);if(j!=10&&dp[i-1][j+1]!=-1)dp[i][j]=max(dp[i][j],dp[i-1][j+1]+a[i][j]);ans=max(ans,dp[i][j]);}}printf("%d\n",ans);}return 0; }
轉載于:https://www.cnblogs.com/huangdao/p/8570084.html
總結
以上是生活随笔為你收集整理的hdu-1176(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到很多红色的虫子怎么回事
- 下一篇: 梦到修房顶是什么意思