标签:ems class return ios iostream const scanf print eof
题目含义
看了就能理解,一个人捡馅饼
题目分析
这和数塔的题做法一样
一个时间就是一层塔,11个位置就是一层塔有11个数
可以从塔底到塔顶dp,dp公式是dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])
题目代码
#include <stdio.h> #include <string.h> #include <iostream> #include<algorithm> using namespace std; const int maxn=1e5+7; int dp[maxn][11],x,t,n; int main(){ while(scanf("%d",&n)&&n){ memset(dp,0,sizeof(dp)); int maxt=0; for(int i=0;i<n;i++){ scanf("%d%d",&x,&t); dp[t][x]++; if(t>maxt)maxt=t; } for(int i=maxt-1;i>=0;i--) for(int j=0;j<=10;j++){ if(!j)dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]); else if(j==10)dp[i][j]+=max(dp[i+1][j],dp[i+1][j-1]); else dp[i][j]+=max(dp[i+1][j],max(dp[i+1][j-1],dp[i+1][j+1])); } printf("%d\n",dp[0][5]); } return 0; }
标签:ems class return ios iostream const scanf print eof
原文地址:https://www.cnblogs.com/helman/p/11227926.html