HDU 1176

来源:互联网 发布:wemall微信商城源码 编辑:程序博客网 时间:2024/06/08 04:13
#include "cstdio"#include "iostream"#include "cstring"#include "algorithm"using namespace std;const int INF=0x3f3f3f3f;const int N=100005;int dp[N][11],a[N][11];//dp[i][j] i为时间 j为地点 int main(){int n; while(scanf("%d",&n)!=EOF&& n){int MAX=0;//最大时间int x,y; memset(a,0,sizeof(a));for(int i=0;i<n;i++){scanf("%d%d",&x,&y);//x 地点 y时间 a[y][x]++;//因为同一个地点,同一时间可能有多个; if(MAX<y)MAX=y;}int ans=0;//边缘初始化 for(int i=0;i<11;i++){if(i!=5) dp[0][i]=-INF;}for(int i=1;i<=MAX;i++)//时间 { //最边上 要分开来单独考虑 dp[i][0]=max(dp[i-1][0],dp[i-1][1])+a[i][0];for(int j=1;j<10;j++){//左中右 三个地方,在加上自己这一时间的 dp[i][j]=max(max(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1])+a[i][j];}dp[i][10]=max(dp[i-1][9],dp[i-1][10])+a[i][10];}for(int i=0;i<=10;i++){ans=max(ans,dp[MAX][i]);}printf("%d\n",ans);}return 0;}

0 0