• 动态规划


    记录点滴。

      1 /*
      2 2015.6    HT
      3 ACM Work_5
      4 
      5 */
      6 
      7 #include <iostream>
      8 #include <algorithm>
      9 using namespace std;
     10 
     11 /*
     12 数塔
     13 要求从顶层走到底层,若每一步只能走到相邻的结点
     14 采用自底向上方法,当前层的数的值由下一层的两个数的值决定
     15 Input:
     16 1
     17 5
     18 7
     19 3 8
     20 8 1 0
     21 2 7 4 4
     22 4 5 2 6 5
     23 Output:
     24 30
     25 */
     26 //int main()
     27 //{
     28 //    int t, n, x[102][102];
     29 //    cin >> t;
     30 //    while (t--)
     31 //    {
     32 //        cin >> n;
     33 //        for (int i = 0; i<n; i++)
     34 //        for (int j = 0; j <= i; j++)
     35 //            cin >> x[i][j];
     36 //        for (int i = n - 2; i >= 0; i--)
     37 //        for (int j = 0; j <= i; j++)
     38 //            x[i][j] = x[i][j] + max(x[i + 1][j], x[i + 1][j + 1]);
     39 //
     40 //        cout << x[0][0] << endl;
     41 //    }
     42 //    return 0;
     43 //}
     44 
     45 
     46 
     47 /*
     48 免费馅饼
     49 0-1-2-3-4-5-6-7-8-9-10
     50 */
     51 //int c[1000][11];
     52 //
     53 //int max1(int a, int b, int c)
     54 //{
     55 //    a = a>b ? a : b;
     56 //    a = a>c ? a : c;
     57 //    return a;
     58 //}
     59 //
     60 //int main()
     61 //{
     62 //    int n, a, b;
     63 //    while (cin >> n && n)
     64 //    {
     65 //        int m = 0;
     66 //        memset(c, 0, sizeof(c));
     67 //        while (n--)
     68 //        {
     69 //            // 坐标点        落下时刻
     70 //            scanf_s("%d%d", &a, &b);
     71 //            c[b][a]++;
     72 //            if (m < b)
     73 //                m = b;
     74 //        }
     75 //        for (int i = m - 1; i >= 0; i--)
     76 //        {
     77 //            for (int j = 1; j <= 9; j++)
     78 //                c[i][j] = c[i][j] + max1(c[i + 1][j - 1], c[i + 1][j], c[i + 1][j + 1]);
     79 //            c[i][0] = c[i][0] + max(c[i + 1][0], c[i + 1][1]);
     80 //            c[i][10] = c[i][10] + max(c[i + 1][9], c[i + 1][10]);
     81 //        }
     82 //        cout << c[0][5] << endl;
     83 //    }
     84 //    return 0;
     85 //}
     86 
     87 
     88 
     89 /*
     90 Super Jumping! Jumping! Jumping!
     91 求解最大递增子序列和
     92 
     93 如:3 1 4
     94 如果第二个数大于第一个数,dp[2]=dp[1]+num[2];如果不大,dp[2]=num[2]; dp[3]=7表示三个数的最大值
     95 首先比较num[3]和num[1],如果num[3]>num[1],dp[3]=7先存下来,如果num[3]>num[2],dp[3]=5依旧存下来;
     96 还有一种如果num[3]比前两个值都小,dp[3]=num[3]; 最后在存下来的dp[3]中找到一个最大的
     97 */
     98 //int num[1010], dp[1010];
     99 //
    100 //int main()
    101 //{
    102 //    int n, Max;
    103 //    while (cin >> n)
    104 //    {
    105 //        if (n == 0)
    106 //            break;
    107 //        Max = 0;
    108 //        memset(dp, 0, sizeof(dp));
    109 //        for (int i = 0; i < n; i++)
    110 //        {
    111 //            cin >> num[i];
    112 //        }
    113 //        dp[0] = num[0];
    114 //        for (int i = 1; i < n; i++)
    115 //        {
    116 //            for (int j = 0; j<i; j++)
    117 //            {
    118 //                if (num[i] > num[j])
    119 //                    dp[i] = max(dp[i], dp[j] + num[i]);
    120 //            }
    121 //            dp[i] = max(dp[i], num[i]);
    122 //        }
    123 //        for (int i = 0; i<n; i++)
    124 //        {
    125 //            Max = max(Max, dp[i]);
    126 //        }
    127 //        cout << Max << endl;
    128 //    }
    129 //    return 0;
    130 //}
    131 
    132 
    133 
    134 /*
    135 Max Sum
    136 calculate the max sum of a sub-sequence
    137 */
    138 int main()
    139 {
    140     int i, Case = 1, t, start, end, n, pos, now, before, max;
    141     cin >> t;
    142     while (t--)
    143     {
    144         cin >> n;
    145         for (i = 1; i <= n; i++)
    146         {
    147             cin >> now;
    148             if (i == 1)
    149             {
    150                 max = before = now;  
    151                 pos = start = end = 1;
    152             }
    153             else
    154             {
    155                 if (now > now + before)
    156                 {
    157                     before = now;
    158                     pos = i;
    159                 }
    160                 else
    161                     before += now;
    162             }
    163             if (before > max)
    164             {
    165                 max = before;
    166                 start = pos;
    167                 end = i;
    168             }    
    169         }
    170         printf_s("Case %d:
    %d %d %d
    ", Case++, max, start, end);
    171         printf_s("
    ");
    172     }
    173     return 0;
    174 }
  • 相关阅读:
    协同过滤
    深度学习中 epoch,[batch size], iterations概念解释
    如何查看Python内置模块的实现代码
    机器学习/数据挖掘/算法岗位
    算法工程师B
    算法工程师A
    web性能测试基本性能指标
    Loadrunner11不能调用IE8解决方法大全
    抓取Android应用的log
    关于字符latin capital letter sharp s "ß"( U+1E9E)显示的问题
  • 原文地址:https://www.cnblogs.com/ht-beyond/p/4564923.html
Copyright © 2020-2023  润新知