HDU 1176 免费馅饼

来源:互联网 发布:pages for windows 编辑:程序博客网 时间:2024/04/30 19:34

一道简单dp,用数组dp[ i ][ j ]表示在第i秒时,坐标为j的点上最多获得的馅饼数

直接上代码

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int a[100050][15];int dp[100050][15];int main(){int n;while(scanf("%d",&n)!=EOF&&n){memset(a,0,sizeof(a));memset(dp,0,sizeof(dp));int maxT=-1;for(int i=0;i<n;i++){int x,t;scanf("%d%d",&x,&t);maxT=max(maxT,t);a[t][x]++;}for(int i=1;i<=maxT;i++){for(int j=0;j<=10;j++){if(i==1){dp[i][4]=a[1][4];dp[i][5]=a[1][5];dp[i][6]=a[1][6];}else{if(j!=0&&j!=10)dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],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];elsedp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];}}}int ans=-1;for(int i=1;i<=maxT;i++){for(int j=0;j<=10;j++)ans=max(ans,dp[i][j]);}printf("%d\n",ans);}return 0;}

0 0