zoukankan      html  css  js  c++  java
  • hdu 1176 竟然是数塔问题

    刚开始做时思路过于局限,只考虑局部的递推,没有全局观导致,越推越复杂,

    最后看到网上答案,精髓啊

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    int max3(int a,int b,int c)
    {
        a = a>b?a:b;
        a = a>c?a:c;
        return a;
    }
    int max2(int a,int b)
    {
        a = a>b?a:b;
        return a;
    }
    int t[100001][11];
    int main()
    {
        int n,T,x,max;
        while(scanf("%d",&n)&&n)
        {
            memset(t,0,sizeof(t));
            max = 0;
            while(n--)
            {
                scanf("%d %d",&x,&T);
                t[T][x]++;
                max = max>T?max:T;
            }
            for(int i = max-1; i >= 0; i--)
            {
                for(int j = 0; j <= 10; j++)
                {
                    if(j==0)t[i][j] += max2(t[i+1][j],t[i+1][j+1]);
                    else if(j==10) t[i][j] += max2(t[i+1][j],t[i+1][j-1]);
                    else t[i][j] += max3(t[i+1][j-1],t[i+1][j],t[i+1][j+1]);
                }
            }
            cout<<t[0][5]<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    多姿多彩的线程
    字典操作
    字符串语法
    购物车
    列表常用语法
    整数划分问题
    计算N的阶层
    判断是否是素数
    快速排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/jackes/p/2454783.html
Copyright © 2011-2022 走看看