zoukankan      html  css  js  c++  java
  • POJ #2479

    Hi, I'm back.

    This is a realy classic DP problem to code. 

    1. You have to be crystal clear about what you are going to solve.
    2. Apparently there are 2 DP sections
    3. Think carefully about recurrence relations
    5. Details: take care of indices boundaries - it costed me 1hr to find an indexing bug!
    6. Again: think crystal clear before you code!

    And, #2593 is exactly the same. 

    Here is my AC code:

     1 #include <stdio.h>
     2 
     3 #define MAX_INX 50010
     4 #define Max(a,b) (a)>(b)?(a):(b)
     5 
     6 int max_sum2(int *pData, int cnt)
     7 {
     8     //    DP: Max sum of sub-sequence: dp[i] = MAX(num[i], dp[i-1] + num[i])
     9 
    10     //    Left -> Right
    11     int  lt[MAX_INX] = { 0 };    
    12     lt[0] = pData[0];
    13     for (int i = 1; i < cnt; i ++)
    14     {
    15         lt[i] = Max(pData[i], lt[i - 1] + pData[i]);
    16     }
    17     
    18     //    Right -> Left
    19     int   rt[MAX_INX] = { 0 };
    20     int     rtm[MAX_INX] = { 0 };
    21     rt[cnt-1] = pData[cnt-1];
    22     for (int i = cnt-2; i >= 0; i--)
    23     {
    24         rt[i] = Max(pData[i], rt[i + 1] + pData[i]);
    25     }
    26     rtm[cnt-1] = rt[cnt-1];
    27     for (int i = cnt-2; i >=0; i--)
    28     {        
    29         rtm[i] = Max(rtm[i+1], rt[i]);
    30     }
    31 
    32     //    O(n) to find real max
    33     int ret = -10010;
    34     for (int i = 0; i < cnt - 1; i ++)
    35     {
    36         ret = Max(ret, lt[i] + rtm[i+1]);
    37     }
    38 
    39     return ret;
    40 }
    41 
    42 int main()
    43 {    
    44     int nTotal = 0; 
    45     scanf("%d", &nTotal);
    46 
    47     while (nTotal--)
    48     {
    49         int num[MAX_INX] = { 0 };
    50         
    51         //    Get Input
    52         int nCnt = 0; scanf("%d", &nCnt);        
    53         for (int i = 0; i < nCnt; i ++)
    54         {
    55             scanf("%d", num + i);
    56         }
    57         
    58         printf("%d
    ", max_sum2(num, nCnt));
    59     }
    60 
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    css样式之补充
    css样式之属性操作
    css之操作属性
    前端基础之css样式(选择器)
    mysql之视图,触发器,事务等
    pymysql模块
    MySQL之IDE工具介绍及数据备份
    mysql老是停止运行该怎么解决
    mysql之索引原理与慢查询优化
    MySQL 5.7.9版本sql_mode=only_full_group_by问题
  • 原文地址:https://www.cnblogs.com/tonix/p/3792916.html
Copyright © 2011-2022 走看看