zoukankan      html  css  js  c++  java
  • HDU1176

    免费馅饼

    题意

    给n个馅饼,每个馅饼在t时刻掉落在p位置(0 <= p <= 10),起初在x=5位置上,每秒只能移动一格,问最终能接多少个馅饼

    分析

    定义:dp[t][p]:t 秒在位置p可以最多接的饼数

    转移:相邻或者自己的位置转移过来,注意边界初始化

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn = 1e5+5;
    
    int a[maxn][11];
    int n;
    int dp[maxn][11];
    
    int main()
    {
        while(scanf("%d", &n)!=EOF)
        {
            memset(a, 0 ,sizeof(a));
            if(n==0)
                break;
            int p,t;
            int maxx = 0;
            while(n--)
            {
                scanf("%d%d", &p, &t);
                a[t][p]++;
                maxx = max(maxx, t);
            }
            for(int i = 0; i <= maxx; i++)
            {
                for(int j = 0; j <= 10; j++)
                    dp[i][j] = -1e9;
            }
            dp[0][5] = 0;
            for(int i = 1; i <= maxx; i++)
            {
                for(int j = 0; j <= 10; j++)
                {
                    if(j==0)
                    {
                        dp[i][j]=max(dp[i-1][j], dp[i-1][j+1])+a[i][j];
                    }
                    else if(j==10)
                    {
                        dp[i][j]=max(dp[i-1][j], dp[i-1][j-1])+a[i][j];
                    }
                    else
                    {
                        dp[i][j] = max(dp[i-1][j], max(dp[i-1][j-1], dp[i-1][j+1]))+a[i][j];
                    }
                }
            }
            int maxsum = 0;
            for(int j = 0; j <= 10; j++)
            {
                maxsum = max(dp[maxx][j],maxsum);
            }
            printf("%d
    ", maxsum);
        }
        return 0;
    }
    View Code
    要么优秀要么生锈
  • 相关阅读:
    NXOpen 创建方体block代码
    Mysql---2 DDL DML DQL DCL
    Mysql数据库--1数据库操作
    FFmpeg
    Servlet Web
    Java web Springboot
    Java 网络
    Java 注解 反射
    Java 线程状态
    Java Lambda
  • 原文地址:https://www.cnblogs.com/Superwalker/p/7878390.html
Copyright © 2011-2022 走看看