zoukankan      html  css  js  c++  java
  • bzoj 4345[POI2016]Korale

    %%%http://blog.csdn.net/lych_cys/article/details/51033694

     1 #include<bits/stdc++.h>
     2 #define INF 0x7fffffff
     3 #define LL long long
     4 #define N 1000005
     5 using namespace std;
     6 inline int ra()
     7 {
     8     int x=0,f=1; char ch=getchar();
     9     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    10     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    11     return x*f;
    12 }
    13 int n,m,cnt,tp,a[N],num[N],val[N<<2],sk[N]; 
    14 LL ans[N];  
    15 struct node{
    16     LL x; int y;
    17 };
    18 priority_queue<node> q;
    19 bool operator <(node a, node b)
    20 {
    21     return a.x>b.x;
    22 }
    23 void build(int k, int l, int r)
    24 {
    25     if (l==r) 
    26     {
    27         val[k]=a[l]; return;
    28     }
    29     int mid=l+r>>1;
    30     build(k<<1,l,mid); build(k<<1|1,mid+1,r);
    31     val[k]=min(val[k<<1],val[k<<1|1]);
    32 }
    33 int query(int k, int l, int r, int x, LL y)
    34 {
    35     if (x<=l)
    36     {
    37         if (val[k]>y) return 0;
    38         if (l==r) return l;
    39     }
    40     int mid=l+r>>1;
    41     if (x<=mid)
    42     {
    43         int t=query(k<<1,l,mid,x,y);
    44         if (t) return t;
    45     }
    46     return query(k<<1|1,mid+1,r,x,y);
    47 }
    48 void dfs(int k, LL rst)
    49 {
    50     if (!cnt) return ; int i;
    51     if (!rst)
    52     {
    53         cnt--;
    54         if (!cnt) for (i=1; i<=tp; i++) printf("%d ",sk[i]);
    55         return;
    56     }
    57     for (i=k+1; i<=n; i++)
    58     {
    59         i=query(1,1,n,i,rst);
    60         if (i)
    61         {
    62             sk[++tp]=i;
    63             dfs(i,rst-a[i]);
    64             tp--;
    65         }
    66         else break;
    67     }
    68 }
    69 int main()
    70 {
    71     n=ra(); m=ra()-1; 
    72     if (!m)
    73     {
    74         cout<<"0";
    75         return 0;
    76     }
    77     for (int i=1; i<=n; i++) a[i]=num[i]=ra();
    78     sort(num+1,num+n+1);
    79     node u; u.x=num[1]; u.y=1; q.push(u);
    80     for (int i=1; i<=m; i++)
    81     {
    82         u=q.top(); q.pop(); ans[i]=u.x;
    83         if (i<m && u.y<n)
    84         {
    85             u.y++; u.x+=num[u.y]; q.push(u);
    86             u.x-=num[u.y-1]; q.push(u);
    87         }
    88     }
    89     for (int i=m; i && ans[i]==ans[m]; i--) cnt++;
    90     printf("%lld
    ",ans[m]);
    91     build(1,1,n); 
    92     dfs(0,ans[m]);
    93     return 0;
    94 }
  • 相关阅读:
    当Django模型迁移时,报No migrations to apply 问题时
    django--各个文件的含义
    django--创建项目
    1013. Battle Over Cities (25)
    1011. World Cup Betting (20)
    1009. Product of Polynomials (25)
    1007. Maximum Subsequence Sum (25)
    1006. Sign In and Sign Out (25)
    1008. Elevator (20)
    1004. Counting Leaves (30)
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6375168.html
Copyright © 2011-2022 走看看