[hdu1176]免费馅饼(数塔dp)

题意:中文题,不解释了 = =

解题关键:逆推,转化为数塔dp就可以了

dp[i][j]表示在i秒j位置的最大值。

转移方程:$dp[i][j] = \max (dp[i + 1][j],dp[i + 1][j - 1],dp[i + 1][j + 1])$

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int dp[][];
int main(){
ios::sync_with_stdio();
int n,x,t;
while(cin>>n&&n){
memset(dp,,sizeof dp);
for(int i=;i<n;i++){
cin>>x>>t;
dp[t][x+]++;
}
for(int i=-;i>=;i--){
for(int j=;j<=;j++){
dp[i][j]+=max(dp[i+][j],max(dp[i+][j-],dp[i+][j+]));
}
}
cout<<dp[][]<<"\n";
}
return ; }
上一篇:教程-Delphi资源文件(全面分析于使用)


下一篇:hdu2084 数塔 DP