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 }

 

你可能感兴趣的:(poj)