zoukankan      html  css  js  c++  java
  • HDU 1176 免费馅饼

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

    分析:本质上是一个数塔问题,第一秒即数塔的第一行为4, 5, 6;第二秒即第二行为3, 4, 5, 6, 7;第三秒2, 3, 4, 5, 6, 7, 8;以此类推;

    dp[i][j]即第i秒走j位置所得馅饼数;

    每次可以选择:保持不动,向左一步,向右一步;

    对于数塔问题我们从下往上推

     1 #include<iostream>
     2 #include<sstream>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<string>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<functional>
     9 #include<iomanip>
    10 #include<numeric>
    11 #include<cmath>
    12 #include<queue>
    13 #include<vector>
    14 #include<set>
    15 #include<cctype>
    16 #define PI acos(-1.0)
    17 const int INF = 0x3f3f3f3f;
    18 const int NINF = -INF - 1;
    19 const int maxn = 1e5 + 5;
    20 typedef long long ll;
    21 using namespace std;
    22 int dp[maxn][15];
    23 int main()
    24 {
    25     int n;
    26     while (~scanf("%d", &n) && n)
    27     {
    28         memset(dp, 0, sizeof(dp));
    29         int ans = -1;
    30         for (int i = 0; i < n; ++i)
    31         {
    32             int x, y;
    33             scanf("%d%d", &x, &y);
    34             dp[y][x]++;
    35             ans = max(ans, y);
    36         }
    37         for (int i = ans - 1; i >= 0; --i)
    38         {
    39             for (int j = 0; j <= 10; ++j)
    40                 dp[i][j] = max(dp[i + 1][j], max(dp[i + 1][j - 1], dp[i + 1][j + 1])) + dp[i][j];
    41         }
    42         printf("%d
    ", dp[0][5]);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    遗传算法的理解
    使用Grub Rescue 修复MBR
    java 虚拟机与并发处理几个问题简要(二)
    java 虚拟机与并发处理几个问题简要(一)
    Fence Repair POJ
    Best Cow Line---POJ 3617(贪心)
    迷宫的最短路径
    最大子段和
    Lake Counting --POJ 2386
    Ants POJ
  • 原文地址:https://www.cnblogs.com/veasky/p/11363402.html
Copyright © 2011-2022 走看看