HDU 1176(时间dp)

来源:互联网 发布:淘宝店企业转个人 编辑:程序博客网 时间:2024/06/06 02:54

题意:如题。

#include<iostream>using namespace std;int p[100000+10][11],dp[100000+10][11];int max(int a,int b,int c){    int d;     d=a>b ? a : b;     return d > c ? d : c;}int max(int a,int b){   return a>b ? a:b;}int main(){    int n,i,j,x,t,MaxT;     while(scanf("%d",&n),n)     {    MaxT=0;          memset(dp,0,sizeof(dp));          memset(p,0,sizeof(p));          for(i=1;i<=n;i++)          {   scanf("%d%d",&x,&t); MaxT=max(MaxT,t);              p[t][x]++;          }          dp[0][5]=0;          int m=0;          for(i=4;i<=6;i++)          {   dp[1][i]=p[1][i];              m=max(m,dp[1][i]);          }         // dp[1][5]=m;          for(i=2;i<=MaxT;i++)          {   for(j=0;j<=10;j++)              {   if(j==0) dp[i][j]=max(dp[i-1][j],dp[i-1][j+1])+p[i][j];      if(j>=1&&j<=9)     dp[i][j]=max(dp[i-1][j],dp[i-1][j+1],dp[i-1][j-1])+p[i][j];      if(j==10) dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+p[i][j];              }         }         int ans=0;         for(i=0;i<=10;i++) ans=max(ans,dp[MaxT][i]);         printf("%d\n",ans);      }return 0;}


 

0 0
原创粉丝点击