• hdu1176 免费馅饼 ——DP


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176

    题目大意:

      中文题……

    题目思路:

      类似于 Triangle 。d[i][j] 表示 i 时间在 j 位置的所得到的价值。然后就像 Triangle 一样从下往上递推。最终求在0秒的时候,在5位置上的值。

    WA了两次,当初求的是0秒的时候,所有位置上的最大值,,这显然是不对的。因为起始位置是5啊。

     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 const int MAX = 100000+10;
     8 int a[MAX][11], d[MAX][11];
     9 void init() {
    10   int m, i, j, x, t, tMax = -1;
    11   while (~scanf("%d", &m) && m) {
    12   memset(a, 0, sizeof(a));
    13   memset(d, 0, sizeof(d));
    14     for (i = 0; i < m; ++i) {
    15       scanf("%d%d", &x, &t);
    16       if (tMax < t) tMax = t;
    17       a[t][x]++;
    18     }
    19     for (i = 0; i <= 10; ++i) d[tMax][i] = a[tMax][i];
    20     for (i = tMax-1; i>= 0; --i) {
    21       for (j = 0; j <= 10; ++j) {
    22         if (j == 0) {
    23           d[i][j] = max(d[i+1][j], d[i+1][j+1]) + a[i][j];
    24           continue;
    25         } 
    26         else if (j == 10) {
    27           d[i][j] = max(d[i+1][j], d[i+1][j-1]) + a[i][j];
    28           continue;
    29         }
    30         d[i][j]=max(d[i+1][j], max(d[i+1][j+1], d[i+1][j-1]))+a[i][j];
    31       }
    32     }
    33     printf("%d\n", d[0][5]);
    34   }
    35 }
    36 int main(void) {
    37   init();
    38   return 0;
    39 }

    很多题目都是相通的

  • 相关阅读:
    nginx
    vue拦截
    时间转化封装
    Vue粒子特效(vue-particles插件)
    vscode 使用ESLint 自动检查,保存时自动格式化
    小程序请求封装
    common.js
    h5常见
    封装promise
    promise使用
  • 原文地址:https://www.cnblogs.com/liuxueyang/p/3099127.html
Copyright © 2020-2023  润新知