zoukankan      html  css  js  c++  java
  • BZOJ2151 种树

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 565  Solved: 310
    [Submit][Status][Discuss]

    Description

    A 城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到 n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和 i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度 总和最大。如果无法将m棵树苗全部种上,给出无解信息。

    Input

    输入的第一行包含两个正整数n、m。第二行n个整数Ai。

    Output

    输出一个整数,表示最佳植树方案可以得到的美观度。如果无解输出“Error!”,不包含引号。

    Sample Input

    【样例输入1】
    7 3
    1 2 3 4 5 6 7
    【样例输入2】
    7 4
    1 2 3 4 5 6 7

    Sample Output

    【样例输出1】
    15

    【样例输出2】
    Error!
    【数据规模】
    对于全部数据:m<=n;
    -1000<=Ai<=1000
    N的大小对于不同数据有所不同:
    数据编号 N的大小 数据编号 N的大小
    1 30 11 200
    2 35 12 2007
    3 40 13 2008
    4 45 14 2009
    5 50 15 2010
    6 55 16 2011
    7 60 17 2012
    8 65 18 199999
    9 200 19 199999
    10 200 20 200000

    HINT

    Source

    思路与[Bzoj1150 数据备份]相同:http://www.cnblogs.com/SilverNebula/p/5654737.html

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 const int mxn=300000;
     9 int n,m;
    10 struct line{
    11     int sc;
    12     int pr,ne;
    13     int mark;
    14 }a[mxn];
    15 bool used[mxn];
    16 int ans=0;
    17 bool operator < (line a,line b){
    18     return a.sc<b.sc;
    19 }
    20 priority_queue<line> q;
    21 int main(){
    22     scanf("%d%d",&n,&m);
    23     int i,j;
    24     for(i=1;i<=n;i++)
    25         scanf("%d",&a[i].sc),a[i].mark=i;
    26     for(i=1;i<n;i++)a[i].ne=i+1;
    27     for(i=2;i<=n;i++)a[i].pr=i-1;
    28     a[1].pr=n;a[n].ne=1;
    29     for(i=1;i<=n;i++) q.push(a[i]);
    30     while(m){
    31         line tp=q.top();
    32         q.pop();
    33         if(q.empty()){
    34             printf("Error!
    ");
    35             return 0;
    36         }
    37         if(used[tp.mark])continue;
    38         //
    39         ans+=tp.sc;
    40         m--;
    41         tp=a[tp.mark];
    42         used[tp.pr]=used[tp.ne]=1;
    43         tp.sc=a[tp.pr].sc+a[tp.ne].sc-tp.sc;
    44         tp.pr=a[tp.pr].pr;
    45         tp.ne=a[tp.ne].ne;
    46         a[tp.ne].pr=tp.mark;
    47         a[tp.pr].ne=tp.mark;
    48         a[tp.mark]=tp;
    49         q.push(tp);
    50     }
    51     printf("%d
    ",ans);
    52     return 0;
    53 }
  • 相关阅读:
    字典的key都可以是什么
    groupby 的妙用(注意size和count)

    希尔排序
    TCP和UDP
    闭包(python)
    快速排序
    mysql t4模板_Model
    vue前端性能优化
    系统稳定性问题总结
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5701274.html
Copyright © 2011-2022 走看看