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 }
  • 相关阅读:
    SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
    Web Api 跨域解决方案
    Web Api Session开启会话支持
    Web Service 学习
    省市选择器
    如何创建圆形头像和圆角图片
    E
    二叉树
    素数筛法
    Color Me Less
  • 原文地址:https://www.cnblogs.com/kirai/p/5579181.html
Copyright © 2011-2022 走看看