简单dp——HDU - 1176
Posted helman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单dp——HDU - 1176相关的知识,希望对你有一定的参考价值。
题目含义
看了就能理解,一个人捡馅饼
题目分析
这和数塔的题做法一样
一个时间就是一层塔,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;
以上是关于简单dp——HDU - 1176的主要内容,如果未能解决你的问题,请参考以下文章