#include"iostream"
#include"algorithm"
#include"vector"
#include"map"
#include"string"
#include"deque"
#include"queue"
#include"stack"
#include"cstdio"
#include"ctype.h"
#include"cmath"
#include"set"
#include"sstream"
using namespace std;
const int num=100000+5;
int main()
{
//freopen("a.txt","r",stdin);
int n;
int dp[num][15]; //时间<=10000 ,0=<位置<=10
while(scanf("%d",&n)==1&&n)
{
memset(dp,0,sizeof(dp));
int t,p;
int i,j;
int maxt =-1;
for(i=0;i<n;i++)
{
scanf("%d%d",&p,&t);
++dp[t][p];
maxt=max(t,maxt);
}
for(i=maxt-1;i>=0;i--)
for(j=0;j<=10;j++)
{
if(j==0) dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+dp[i][j]; //0 10两个位置单独考虑
else if(j==10) dp[i][j]=max(dp[i+1][j],dp[i+1][j-1])+dp[i][j];
else dp[i][j]=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]))+dp[i][j];
}
cout<<dp[0][5]<<endl; //5是源点 相当于塔顶
}
return 0;
}
HDOJ1176数塔
最新推荐文章于 2021-08-27 23:31:50 发布