您的位置:首页 > 其它

动态规划复习-HDU2084

2012-02-08 23:40 423 查看
水题一道,但是论坛中有人说从上往下dp,一定是wa,我两个方向都试过了,全部ac。

自底向上dp:
#include
int c, n;
int dp[100][100];
int max (int a, int b) {
if (a > b)
return a;
return b;
}
int main() {
scanf("%d", &c);
while (c--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j)
scanf("%d", &dp[i][j]);
for (int i = n - 1; i > 0; --i)
for (int j = 1; j <= i; ++j)
dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + dp[i][j];
printf("%d\n", dp[1][1]);
}
return 0;
}


自顶向下dp:
#include
#include
int c, n;
int dp[100][100];
int max (int a, int b) {
if (a > b)
return a;
return b;
}
int main() {
scanf("%d", &c);
while (c--) {
scanf("%d", &n);
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j)
scanf("%d", &dp[i][j]);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j)
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + dp[i][j];
int m = 0;
for (int i = 1; i <= n; ++i)
if (dp
[i] > m) m = dp
[i];
printf("%d\n", m);
}
return 0;
}


注意不要和“自顶向下分析,自底向上求解”混淆了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: