社区讨论

0pts求条

P5751[NOI1999] 01串参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@miolfy7c
此快照首次捕获于
2025/12/02 21:08
3 个月前
此快照最后确认于
2025/12/04 18:55
3 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n,a0,b0,l0,a1,b1,l1;
int cnt,h[3010];
struct node{
	int to,next,w;
}e[301000];
int dp[3010],vis[3010],sum[3010];
void add(int x,int y,int z){
	++cnt;
	e[cnt].to=y;
	e[cnt].next=h[x];
	e[cnt].w=z;
	h[x]=cnt;
}
int SPFA(){
	memset(dp,-0x3f,sizeof dp);
	queue<int> q;
	dp[0]=0;
	q.push(0);
	vis[0]=1;
	sum[0]=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=h[u];i;i=e[i].next){
			int v=e[i].to,c=e[i].w;
			if(dp[v]<dp[u]+c){
				dp[v]=dp[u]+c;
				sum[v]=sum[u]+1;
				if(sum[v]>=n+2) return 1;
				if(vis[v]==0){
					q.push(v);
					vis[v]=1;
				}
			}
		}
	}
	return 0;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>a0>>b0>>l0>>a1>>b1>>l1;
	for(int i=1;i<=n;i++){
		add(i-1,i,1);
		add(i,i-1,0);		
	}
	for(int i=0;i+l0<=n;i++){
		add(i+l0,i,b0-l0);
		add(i,i+l0,l0-a0);		
	}
	for(int i=0;i+l1<=n;i++){
		add(i+l1,i,-a1);
		add(i,i+l1,b1);
	}
	for(int i=1;i<=n;i++) add(0,i,0);
	if(SPFA()==1) cout<<-1;
	else cout<<dp[n];
	return 0;
}
一直输出-1不知道为啥

回复

5 条回复,欢迎继续交流。

正在加载回复...