• HDU 1176 免费馅饼


    类似于数塔的变形,只不过是每个数下面要取的是三个数的最大值,另外注意边界。

    第0秒 5

    第1秒 4 5 6

    第2秒 3 4 5 6 7

    第3秒 2 3 4 5 6 7 8

    第4秒 1 2 3 4 5 6 7 8 9

    第5秒 0 1 2 3 4 5 6 7 8 9 10

    第6秒 0 1 2 3 4 5 6 7 8 9 10

    第7秒 .................

    我的代码:

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 int dp[100001][12];
     5 int max1(int a,int b,int c)
     6 {
     7     if(a>=b&&a>=c)
     8         return a;
     9     else if(b>=a&&b>=c)
    10         return b;
    11     else
    12         return c;
    13 };
    14 int max2(int a,int b)
    15 {
    16     return a>b?a:b;
    17 };
    18 
    19 int main()
    20 {
    21     int i,j,n,tt,x,t;
    22     while(~scanf("%d",&n)&&n!=0)
    23     {
    24         tt=0;
    25         memset(dp,0,sizeof(dp));
    26         while(n--)
    27         {
    28             scanf("%d%d",&x,&t);
    29             dp[t][x]++;
    30             if(t>tt)
    31                 tt=t;
    32         }
    33         for(i=tt; i>=1; i--)
    34         {
    35             dp[i-1][0]+=max2(dp[i][0],dp[i][1]);
    36             dp[i-1][10]+=max2(dp[i][9],dp[i][10]);
    37             for(j=1; j<=9; j++)
    38             {
    39                     dp[i-1][j]+=max1(dp[i][j-1],dp[i][j],dp[i][j+1]);
    40             }
    41         }
    42         printf("%d\n",dp[0][5]);
    43     }
    44 }

    网上还有一种做法,是从上往下求解的(代码地址:http://www.clanfei.com/2012/04/646.html

    我刚开始的时候也是从上往下求的,但是没考虑前四秒,即使有些地方馅饼很多game也拿不到,而且我还对时间和位置排了序,后来发现没必要,还是有点和贪心混了…………

    网上这种方法是把dp数组和输入的a数组分开的,而dp数组初始为0,所,以不会出现我 的这种错误。但是还是用从下往上求比较好。

     
  • 相关阅读:
    expandablelistview学习在listView里面嵌套GridView
    App数据格式之解析Json
    不应和应该在SD卡应用应用
    9 个用来加速 HTML5 应用的方法
    Android设计模式系列-索引
    ObjectiveC语法快速参考
    App列表显示分组ListView
    进程、线程和协程的图解
    Python多进程原理与实现
    Python多线程的原理与实现
  • 原文地址:https://www.cnblogs.com/bfshm/p/3051621.html
Copyright © 2020-2023  润新知