• HDU 1176 免费馅饼 DP类似数塔题


    解题报告:

    小明走在一条小路上,这条小路的长度是10米,从左到右依次是0到10一共十个点,现在天上会掉馅饼,给出馅饼掉落的坐标和时间,一开始小明的位置是在坐标为5的位置,

    他每秒钟只能移动一米的距离,问他最多能得到多少个馅饼。

    这题可以说是一个动态规划题,就是一个数塔的变形,而且跟数塔的区别很小,我们可以把时间当成是数塔中的层,坐标就是数塔中的横向的位置,然后就是从时间最大的那一层出发,往时间最小的方向递归,最后得到的dp[0][5]就是我们所要的结果。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 int max(int a,int b,int c) {
     5     int ans = std::max(a,b); 
     6     return std::max(ans,c);
     7 }
     8 int map[100005][11];
     9 int main() {
    10     int n,x,t;
    11     while(scanf("%d",&n)&&n) {
    12         memset(map,0,sizeof(map));  //初始化都为0 
    13         int Tm = 0;          //求出最大的时间 
    14         for(int i = 1;i<=n;++i) {
    15             scanf("%d%d",&x,&t);
    16             Tm = std::max(Tm,t);
    17             map[t][x]++;
    18         }
    19         for(int i = Tm - 1;i>=0;--i)
    20         for(int j = 0;j<=10;++j) {
    21             if(j==0)
    22             map[i][j] += std::max(map[i+1][j],map[i+1][j+1]);
    23             else if(j==10)
    24             map[i][j] += std::max(map[i+1][j],map[i+1][j-1]);
    25             else map[i][j] += max(map[i+1][j-1],map[i+1][j],map[i+1][j+1]);
    26         }
    27         printf("%d
    ",map[0][5]);
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    va_list va_start va_end va_arg 解决变参问题
    标准输出文件
    Qt QDataTime QString 两个类的使用
    联合开发网站
    iOS LLDB调试器和断点调试
    Wireshark 网络抓包工具Wireshark的使用
    linux 操作系统下c语言编程入门
    iOS 应用崩溃日志分析
    iOS sqlite3数据库解析
    iOS 解析手势识别(Gesture Recognizers)
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3197004.html
Copyright © 2020-2023  润新知