zoukankan      html  css  js  c++  java
  • [LightOJ1004]Monkey Banana Problem(dp)

    题目链接:http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1004

    题意:数塔的变形,上面一个下面一个,看清楚了直接做就行了。

    上半部分转移方程dp(i,j)=max(dp(i-1,j),dp(i-1,j+1))+G(i,j)

    下半部分转移方程dp(i,j)=max(dp(i-1,j-1),dp(i-1,j))+G(i,j)

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 const int maxn = 1111;
    23 int n, m;
    24 int dp[maxn][maxn];
    25 int G[maxn][maxn];
    26 
    27 int main() {
    28     // freopen("in", "r", stdin);
    29     int T;
    30     scanf("%d", &T);
    31     for(int _ = 1; _ <= T; _++) {
    32         scanf("%d", &n);
    33         int cnt = 0;
    34         bool flag = 0;
    35         for(int i = 1; i <= 2 * n - 1; i++) {
    36             if(!flag) cnt++;
    37             for(int j = 1; j <= cnt; j++) {
    38                 scanf("%d", &G[i][j]);
    39             }
    40             if(cnt > n - 1) flag = 1;
    41             if(flag) cnt--;
    42         }
    43         cnt = 0;
    44         flag = 0;
    45         memset(dp, 0, sizeof(dp));
    46         for(int i = 1; i <= 2 * n - 1; i++) {
    47             if(!flag) cnt++;
    48             for(int j = 1; j <= cnt; j++) {
    49                 if(i == 1 && j == 1) {
    50                     dp[1][1] = G[1][1];
    51                     continue;
    52                 }
    53                 if(!flag) dp[i][j] = G[i][j] + max(dp[i-1][j-1], dp[i-1][j]);
    54                 else dp[i][j] = G[i][j] + max(dp[i-1][j+1], dp[i-1][j]);
    55             }
    56             if(cnt > n - 1) flag = 1;
    57             if(flag) cnt--;
    58         }
    59         printf("Case %d: %d
    ", _, dp[2*n-1][1]);
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    Spring data jpa使用枚举
    IO
    Tomcat相关问题
    flex中为控件添加监听器并计算
    导出excel
    webService常见问题
    从指定的路径中查找含有特殊字符串的文件
    flex中日期的格式化
    flex与后台及页面间对象的传递
    打印时有选择的打印
  • 原文地址:https://www.cnblogs.com/kirai/p/5579181.html
Copyright © 2011-2022 走看看