求调70分代码,悬5关
查看原帖
求调70分代码,悬5关
532109
freedom_wang楼主2024/7/16 08:12
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rop(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
#define por(i,a,b) for(int i=a;i>b;i--)
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef double lf;
typedef long double ld;
using namespace std;
int n,s,t,p,a,b,c,d,tot=1,r[2005],head[2005],dis[2005],flow[2005],pre[2005],anscost;
bool vis[2005];
queue<int>q;
struct edge{
	int to,nxt,w,c;
}e[100005];
void add(int u,int v,int w,int c){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	head[u]=tot;
	e[tot].w=w;
	e[tot].c=c;
}
bool spfa(){
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[s]=0;
	vis[s]=1;
	flow[s]=0x3f3f3f3f;
	q.push(s);
	while(q.size()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=head[u];i;i=e[i].nxt){
			int to=e[i].to,c=e[i].c;
			if(e[i].w&&dis[u]+c<dis[to]){
				dis[to]=dis[u]+c;
				flow[to]=min(flow[u],e[i].w);
				pre[to]=i;
				if(!vis[to]){
					vis[to]=1;
					q.push(to);
				}
			}
		}
	}
	return dis[t]!=0x3f3f3f3f;
}
void ek(){
	while(spfa()){
		int x=t;
		while(x!=s){
			int i=pre[x];
			e[i].w-=flow[t];
    	    e[i^1].w+=flow[t];
        	x=e[i^1].to;
		}
		anscost+=flow[t]*dis[t];
	}
}
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	t=n<<1|1;
	rep(i,1,n)
		cin>>r[i];
	cin>>p>>a>>b>>c>>d;
	rop(i,1,n){
		add(i,i+1,0x3f3f3f3f,0);
		add(i+1,i,0,0); 
	}
	rep(i,1,n){
		add(i,t,r[i],0);
		add(t,i,0,0);
	} 
	rep(i,1,n){
		add(s,i+n,r[i],0);
		add(i+n,s,0,0);
	}
	rep(i,1,n-a){
		add(i+n,i+a,0x3f3f3f3f,b);
		add(i+a,i+n,0,-b);
	}
	rep(i,1,n-c){
		add(i+n,i+c,0x3f3f3f3f,d);
		add(i+c,i+n,0,-d);
	}
	add(s,1,0x3f3f3f3f,p);
	add(1,s,0,-p);
	ek();
	cout<<anscost;
	return 0;
}
/*
?现在jc方式那么低级啊
*/

https://www.luogu.com.cn/record/166266108

不知道错哪了

2024/7/16 08:12
加载中...