社区讨论
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 条回复,欢迎继续交流。
正在加载回复...