zoukankan      html  css  js  c++  java
  • 51nod建设国家

    小C现在想建设一个国家。这个国家中有一个首都,然后有若干个中间站,还有若干个城市。

    现在小C想把国家建造成这样的形状:选若干(可以是0个)的中间站把他们连成一条直线,然后把首都连在这一条直线的左端。然后每个点可以连一个城市,特别的是最右端的点可以连接两个城市。

    现在有n个城市的规划供小C选择。但是,他们那儿的交通条件比较差,他们那儿一天是2*H个小时,每个城市里面的人每天都会去首都拿一样东西,从他们所在的城市出发,到了首都之后拿了东西就走(拿东西的时间可以忽略不计),他们要在2*H个小时之内返回他们自己的家中(从家中出发到返回家中不超过2*H小时)。

    每个城市有两个属性,一个是城市的直径,另外一个是能居住的人口数目。对于第i个城市而言,这两个属性分别是hi,pi。

    城市的直径的意思是离这个城市出口最远的人想要出城先要在城里行走的最少的时间。

    在首都,中间站,城市之间行走要花费1小时的时间。

    小C想选择一些城市然后通过若干的中间站和首都连接起来,在每个人能在2*H小时返回的条件下所有城市居住的总人口数目要最多。

    样例解释:最上面的蓝点表示首都,其它的蓝点表示中间站,剩下的红圈表示选择的城市。
    Input
    单组测试数据。
    第一行包含两个整数n 和H (1 ≤ n ≤ 1000,1 ≤ H ≤ 1000000000),表示可供选择的城市数目和时间限制。
    接下来n行,每行有两个整数hi, pi (1 ≤ hi ≤ H, 1 ≤ pi ≤ 1000),第i个城市的两个属性,即直径和能容纳人口数。
    Output
    输出最多能居住的人口数目。
    Input示例
    5 10
    1 1
    1 1
    2 2
    3 3
    4 4
    Output示例
    11


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    #define   Max       1010
    #define   ll        long long
    #define   max(a,b)  a>b?a:b
    
    ll dp[Max][Max];
    
    struct City
    {
        int hi,pi;
    }city[Max];
    int  cmp(City x,City y)
    {
        if(x.hi==y.hi)return x.pi>y.pi;
        return  x.hi>y.hi;
    }
    int main()
    {
    //    freopen("p1475t14in.txt","r",stdin);
        int n,h;
        ll ans=0;
        scanf("%d%d",&n,&h);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&city[i].hi,&city[i].pi);
        }
        sort(city+1,city+n+1,cmp);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=i;j++)
            {
                dp[i][j]=dp[i-1][j];        
                if(j+city[i].hi-1<=h&&(j!=1))
                ans=max(ans,dp[i-1][j-1]+city[i].pi);        
                if(j+city[i].hi<=h)            
                dp[i][j]=max(dp[i][j],city[i].pi+dp[i-1][j-1]);    
                 
            }
            if(n==1)ans=max(ans,dp[1][1]);
        printf("%lld
    ",ans);
        return 0;
    } 
    View Code
  • 相关阅读:
    Java Scanner
    Java 继承
    什么叫异常?什么叫错误? 如何捕获异常? 如何抛出异常? 说说finally和final的区别! 什么是JDK?什么是JRE?说说它们之间的区别? 说说字符常量和字符串常量的区别
    数据分析三剑客之Pandas时间序列
    Css样式布局之Flex弹性盒子布局
    memcached的安装和使用
    Flask 第十八话之Restful API
    Flask 第十七话之信号
    Flask 第十六话之钩子函数
    Flask 第十五话之请求上下文及全局全局存储g对象
  • 原文地址:https://www.cnblogs.com/duanyuanzhi/p/4872508.html
Copyright © 2011-2022 走看看