POJ 3176 Cow Bowling dp, 贪心

题意:从顶点走到最底,第 map[i][j] 层位置到第 i+1 层,只能走map[i+1][j] 或者是 map[i+1][j+1].

思路:简单DP, 倒推上去, 求走到第 map[i][j] 这个位置的最大值, 那么 map[i][j] = GetMax(map[i-1][j] , map[i-1][j-1]);

 

11040124 NY_lv10 3176 Accepted 892K 157MS C++ 828B 2012-11-22 18:34:33

 

View Code
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int maxx;
 5 int map[400][400];
 6 int n;
 7 
 8 //void dfs(int i, int j, int sum)   //递归超时
 9 //{
10 //
11 //    if (j< 0 || sum + (n-i)*99 <= maxx)
12 //        return ;
13 //    if (i == n)
14 //    {
15 //        if (maxx <sum)
16 //            maxx = sum;
17 //        return ;
18 //    }
19 //    dfs(i+1, j+1, sum+map[i][j]);
20 //    dfs(i+1, j, sum+map[i][j]);
21 //}
22 
23 int GetMax(int a, int b)
24 {
25     return a > b ? a : b;
26 }
27 
28 
29 int main()
30 {
31 
32     int i, j;
33     while (cin>>n)
34     {
35         maxx = 0;
36         memset(map, 0, sizeof(map));
37         for (i=1; i<=n; i++)      //i从0开始就错.....不知道为毛!!
38         {
39             for (j=1; j<=i; j++)
40             {
41                 cin>>map[i][j];
42             }
43         }
44     //    dfs(0, 0, 0);
45         //maxx = map[0][0];
46         for (i=1; i<=n; i++)
47         {
48             for (j=1; j<=i; j++)
49             {
50                 map[i][j] += GetMax(map[i-1][j], map[i-1][j-1]);
51                 if (map[i][j] > maxx)
52                     maxx = map[i][j];
53             }
54         }
55         cout<<maxx<<endl;
56     }
57 }

 

posted @ 2012-11-22 18:42  旅行的蜗牛  阅读(177)  评论(0编辑  收藏  举报