zoukankan      html  css  js  c++  java
  • Lightoj 1004

    题目链接:http://acm.hust.edu.cn/vjudge/contest/121396#problem/F

    http://lightoj.com/volume_showproblem.php?problem=1004

    密码:acm

    分析:求从上往下路径的最大权值。

     
    解题思路:数字三角形的变形,把菱形分为上下两部分求即可。dp[i][j]表示路径到第i行第j个点的最大权值和。
     
     

    *:

     上:dp[i][j]=max(dp[i-1][j], dp[i-1][j-1])+maps[i][j];
     下:dp[i][j]=max(dp[i-1][j], dp[i-1][j+1])+maps[i][j];
     
    Sample Input
    2
    4
    7
    6 4
    2 5 10
    9 8 12 2
    2 12 7
    8 2
    10
    2
    1
    2 3
    1
    Sample Output
    Case 1: 63
    Case 2: 5

    *********************************************************

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 #include<algorithm>
     6 #include<iostream>
     7 
     8 using namespace std;
     9 
    10 #define M 10200
    11 #define N 1500///N 开大了就MLE了,~~~~(>_<)~~~~ 
    12 
    13 int dp[N][N],maps[N][N];
    14 
    15 int main()
    16 {
    17     int n,i,j, T, k=1;
    18 
    19     scanf("%d", &T);
    20 
    21     while(T--)
    22     {
    23         scanf("%d", &n);
    24 
    25         memset(dp, 0,sizeof(dp));
    26         memset(maps,0,sizeof(maps));
    27 
    28         for(i=1;i<=n;i++)
    29             for(j=1;j<=i;j++)
    30             scanf("%d",&maps[i][j]);
    31 
    32         for(i=n+1;i<n*2;i++)
    33             for(j=1;j<=n*2-i;j++)
    34             scanf("%d", &maps[i][j]);
    35 
    36         dp[1][1]=maps[1][1];
    37 
    38         for(i=1;i<=n;i++)
    39             for(j=1;j<=i;j++)
    40                 dp[i][j]=max(dp[i-1][j], dp[i-1][j-1])+maps[i][j];
    41             ///上半部分从上到下
    42        /*{
    43            dp[i+1][j]=max(dp[i+1][j], dp[i][j]+maps[i+1][j]);
    44            dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+maps[i+1][j+1]);
    45         }*/
    46        
    47 
    48         for(i=n+1;i<n*2;i++)
    49             for(j=1;j<=n*2-i;j++)
    50             dp[i][j]=max(dp[i-1][j], dp[i-1][j+1])+maps[i][j];
    51             ///下半部分从上到下
    52 
    53         printf("Case %d: %d
    ", k++, dp[n*2-1][1]);
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    白话经典算法系列之六 高速排序 高速搞定
    簡單SQL存儲過程實例
    ACE编译运行错误解决
    shell之变量与read
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯购物单
    Java实现第八届蓝桥杯购物单
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5731575.html
Copyright © 2011-2022 走看看