//考察点:dp,简单数塔,从下往上不断dp,最后得到的为最大值
//思路,第0秒 5
//第1秒 4 5 6
//第2秒 3 4 5 6 7
//第3秒 2 3 4 5 6 7 8
//第4秒 1 2 3 4 5 6 7 8 9
//第5秒 0 1 2 3 4 5 6 7 8 9 10
//第6秒 0 1 2 3 4 5 6 7 8 9 10
//提交情况 WA一次,原因:for(j=1;j<=9;j++)中j写成从0开始了,粗心了。
//收获,学到了数塔的知识
//AC code
#include<iostream>
using namespace std;
int dp[100005][12];
int x,T;
int max3(int a,int b,int c){
return c>(a>b?a:b)?c:(a>b?a:b);
}
int main(){
int n;
while(scanf("%d",&n)&&n){
memset(dp,0,sizeof(dp));
int i,j,Max=-1;
for(i=0;i<n;i++){
scanf("%d%d",&x,&T);
if(Max<T)
Max=T;
dp[T][x]++;
}
for(i=Max-1;i>=0;i--){
if(i>4){
dp[i][0]+=max(dp[i+1][0],dp[i+1][1]);
for(j=1;j<=9;j++){
dp[i][j]+=max3(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
}
dp[i][10]+=max(dp[i+1][9],dp[i+1][10]);
}
else{
for(j=5-i;j<=5+i;j++){
dp[i][j]+=max3(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
}
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}
hdu 1176 免费馅饼(数塔问题)
最新推荐文章于 2020-10-09 19:39:52 发布