杭电 1176 免费馅饼 (数塔问题)

来源:互联网 发布:阿振网络随笔 编辑:程序博客网 时间:2024/05/17 04:18

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

数塔问题!

这道题注意t可以等于0

数组一定要注意,不要开小了!!!

递推的方式来构造算法!

#include <iostream>using namespace std;int dp[100010][11];int v[100010][11];int max(int x,int y){if(x>y) return x;else return y;}int max(int x,int y,int z){if(x<y) swap(x,y);if(x<z) swap(x,z);return x;}int main(){int n,i,j;int x,T;int max_T;while(scanf("%d",&n)&&n){memset(dp,0,sizeof(dp));memset(v,0,sizeof(v));max_T=0;for(i=1;i<=n;i++){scanf("%d%d",&x,&T);v[T][x]++;max_T=max(T,max_T);}for(i=0;i<11;i++)dp[max_T][i]=v[max_T][i];for(i=max_T-1;i>=0;i--)for(j=0;j<11;j++){if(j==0) dp[i][j]=v[i][j]+max(dp[i+1][j],dp[i+1][j+1]);else if(j==10) dp[i][j]=v[i][j]+max(dp[i+1][j],dp[i+1][j-1]);else dp[i][j]=v[i][j]+max(dp[i+1][j],dp[i+1][j-1],dp[i+1][j+1]);}cout<<dp[0][5]<<endl;}return 0;}


原创粉丝点击