码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2084

时间:2015-03-20 18:16:47      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

这是一道DP题目,状态转移方程为:

f[i][j] = max(f[i+1][j], f[i+1][j+1]) + arr[i][j];

采用从底向上算的办法,输出f[0][0]即是结果。

当然,也可以从上向下算,f[i][j] = max(f[i-1][j-1], f[i-1][j-1])+arr[i][j],然后从最后一行中求出最大值即可。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main(void)
 6 {
 7     int test, n;
 8     int arr[105][105];
 9     int fun[105][105];
10     scanf("%d", &test);
11     while(test--) {
12         int i, j;
13         memset(arr, 0, sizeof(arr));
14         memset(fun, 0, sizeof(fun));
15         scanf("%d", &n);
16         for(i = 1; i <= n; i++) {
17             for(j = 1 ; j <= i; j++) {
18                 scanf("%d", &arr[i][j]);
19             }
20         }
21 
22 
23         for(j = 1; j <= n; j++)    //在这里被坑了,习惯上从0开始
24             fun[n][j] = arr[n][j];
25         for(i = n-1; i > -1; i--) {
26             for(j = i; j > -1; j--) {
27                 int tmp = (fun[i+1][j] > fun[i+1][j+1]) ? fun[i+1][j] : fun[i+1][j+1];
28                 fun[i][j] = tmp + arr[i][j];
29             }
30         }
31         
32         printf("%d\n", fun[1][1]);
33         
34         
35         
36     }
37     return 0;
38     
39 }

 

HDU 2084

标签:

原文地址:http://www.cnblogs.com/mylinuxer/p/4354007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!