hdu1176免费馅饼

题目链接:hdu1176

 

思路:

/*
动态规划
状态表示:dp[i,j]为j秒时在i位置的最大值
状态转移:i=0    dp[0][j] += Max(dp[0][j+1], dp[1][j+1]);
         i=10   dp[10][j] += Max(dp[10][j+1], dp[9][j+1]);
         i=1-9  dp[i][j] += Max(dp[i][j+1], dp[i+1][j+1], dp[i-1][j+1]);
         0<=j<=MaxTime
hdu 1176-免费馅饼
written by lky
2008-3-4 19:54
*/

 

代码:

#include #include using namespace std; int dp[11][100001]; inline int Max(int a, int b, int c=-1) { if(a < b) a = b; if(a < c) a = c; return a; } int main() { int n, i, j; int t, x; while (scanf("%d", &n)!=EOF && n) { memset(dp, 0, sizeof(dp)); int MaxTime = 0; for (i=0; iMaxTime ? t:MaxTime; } for (j=MaxTime-1; j>=0; --j) { dp[0][j] += Max(dp[0][j+1], dp[1][j+1]); dp[10][j] += Max(dp[10][j+1], dp[9][j+1]); for (i=1; i<10; ++i) { dp[i][j] += Max(dp[i][j+1], dp[i+1][j+1], dp[i-1][j+1]); } } printf("%d/n", dp[5][0]); } return 0; }


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/LuckilyYu/archive/2008/03/04/2147339.aspx

你可能感兴趣的:(动态规划,c)