zoukankan      html  css  js  c++  java
  • 【luogu1315】 观光公交[贪心]

    noip2011 观光公交

    有点难受QAQ

    每次修改一条路(i) 它只会影响到达景点(i+1)以及它之后的连续的会出现”人等车“的情况的景点 若景点(i+1)之后出现一个景点是(x)"车等人"的情况那么这条路权值减少就会不影响到景点(x)及其之后的景点

    那么每次贪心减去影响最大的那条边

    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n),rd(m),rd(k);
    	for(int i=1;i<n;++i) rd(d[i]);
    	for(int i=1;i<=m;++i){
    		rd(t[i]),rd(fr[i]),rd(to[i]);
    		las[fr[i]]=Max(las[fr[i]],t[i]),++dw[to[i]];
    	}
    	for(int i=1;i<=n;++i) sum[i]=sum[i-1]+dw[i];
    	for(int i=1,nw=0;i<=n;++i) lef[i]=nw=Max(las[i],nw),nw+=d[i];
    	for(int i=1;i<=m;++i) ans+=((ll)lef[to[i]-1]+d[to[i]-1])-t[i];
    	while(k--){
    		for(int i=1,nw=0;i<=n;++i) lef[i]=nw=Max(las[i],nw),nw+=d[i];
    		eff[n-1]=n;//第i条边改变 会影响到的最远城市 
    		for(int i=n-2,arr;i;--i){
    			arr=lef[i]+d[i];
    			if(arr>las[i+1]) eff[i]=eff[i+1];
    			else eff[i]=i+1;
    		}
    		int mx=0,pos=0;
    		for(int i=1;i<n;++i)
    			if(d[i]&&sum[eff[i]]-sum[i]>mx) mx=sum[eff[i]]-sum[i],pos=i;
    		ans-=mx,--d[pos];
    	}
    	printf("%lld",ans);
    	return 0; 
    }
    
  • 相关阅读:
    Ajax请求参数解释
    下拉菜单:‘点击外面关闭’的解决方案
    nc
    telnet
    arping
    traceroute
    ping
    ss
    netstat
    ip
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11656167.html
Copyright © 2011-2022 走看看