hdu 1176

hdu 1176 http://acm.hdu.edu.cn/showproblem.php?pid=1176

从下往上的DP,要注意接馅饼的位置还可以站着不动。之前没注意到WA了几次。。。

code:

#include <iostream>
#include "memory.h"
#include "cstdio"
using namespace std;
int dp[100005][15];
int max(int a,int b)
{
	if(a>b)
	{
		return a;
	}
	return b;
}
int main(int argc, char *argv[])
{
	int n;
	while(scanf("%d",&n)&&n)
	{
		int i;
		memset(dp,0,sizeof(dp));
		int timee=-1;
		for(i=0;i<n;i++)
		{
			int x,t;
			scanf("%d%d",&x,&t);
			if(timee<t)
			{
				timee=t;
			}
			dp[t][x]+=1;
		}
		int j;
		
		for(i=timee-1;i>=0;i--)			//从下往上的dp 
		{
			for(j=0;j<=10;j++)
			{
				if(j==0)
				{
					dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]);	//还可以站着不动啊。。。 
				}else if(j==10)
				{
					dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j]);	//右边界 
				}else
				{
					dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j]),max(dp[i+1][j+1],dp[i+1][j]));
				}
			}
		}
	
		printf("%d\n",dp[0][5]);
	}
	return 0;
}



你可能感兴趣的:(hdu 1176)