zoukankan      html  css  js  c++  java
  • HDU 1176 免费馅饼 简单动态规划

    世道很简单的动态规划,但是却错了,让我很无语,改来改去还是不对,第二天有写就对了,之后我就耐着性子慢慢比较之前的错误代码,发现

    第一次错:纯粹用了a[i][j]+=max3(a[i+1][j-1], a[i+1][j], a[i+1][j+1]);没有考虑j为0没有a[i+1][j-1]的存在和j为10时没有a[i+1][j+1]的存在

    第二次错:我纠正了第一次的错误,把j为0和10单独考虑,这是数塔类型,我是自下向上推得,所以行数应该从最大的时间m=t;m-1开始的,但我写的是m,我感觉应该没有什么问题,但却栽了;

    第三次错:心太急了,已经心烦意乱了,我纠正了前两次的错误, 并修改成每次a[t][l+1]++;这样就不用特殊处理了,但是我的j应该是从0-12;但我却j=1; j<11; j++; 应该写成 j=1; j<12; j++;我也真是醉了!还有就是a[t][l++]++;也是错,为什么!看来严谨的精神是很重要的!

    这次的经历虽然很浪费时间,但是让我明白了,无论什么时候都要静下心来,不能乱,如果心乱了就静一静,先不要写代码!

    #include<stdio.h>
    #include<string.h>
    #define N 100010
    int a[N][12];
    
    int max2(int x, int y)
    {
        return x>y?x:y;
    }
    
    int max3(int x, int y, int z)
    {
        int v=max2(x, y);
    
        return max2(v, z);
    }
    int main()
    {
        int n, l, t;
        while(scanf("%d", &n), n!=0)
        {
            memset(a, 0, sizeof(a));
    
            int m=0;
            for(int i=0; i<n; i++)
            {
                scanf("%d%d", &l, &t);
                a[t][l+1]++;
    
                if(m<t)
                    m=t;
            }
    
            for(int i=m-1; i>=0; i--)
                for(int j=1; j<=11; j++)
                {
                    a[i][j]+=max3(a[i+1][j-1], a[i+1][j], a[i+1][j+1]);
                }
    
            printf("%d
    ", a[0][6]);
    
        }
        return 0;
    }
    

      

  • 相关阅读:
    用户自定义控件的嵌套问题
    ASP.NET进阶:调用Javascript
    [网络收集]FCKeditor配置和精简【附源码】
    检查session判断用户是否退出登录
    Server.Transfer VS Response.Redirect
    asp.net下ckeditor3.0.1和ckfinder_aspnet_1.4.1.1的配置方法
    Sudoku(数独)
    转自:蓝色污点的专栏
    LETTERS(字母)
    放苹果
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4780078.html
Copyright © 2011-2022 走看看