A了但不理解
查看原帖
A了但不理解
775975
lovely_codecat楼主2023/4/29 17:06
#include<bits/stdc++.h>
using namespace std;
int n,m,c,a[1000001],u,v,cnt,head[100001],dp[1005][1005],ans;
struct nood {
	int nex,to;
}e[100001<<2];
inline void add(int u,int v) {
	e[++cnt].nex=head[u];
	head[u]=cnt;
	e[cnt].to=v;
}
main(){
	cin>>n>>m>>c;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>u>>v,add(v,u);
	memset(dp,-1,sizeof(dp));
	dp[0][1]=0;
	for(int i=1;i<=1000;i++)for(int j=1;j<=n;j++)for(int k=head[j];k;k=e[k].nex)if(~dp[i-1][e[k].to])dp[i][j]=max(dp[i][j],dp[i-1][e[k].to]+a[j]);
	for(int i=1;i<=1000;i++)ans=max(ans,dp[i][1]-c*i*i);
	cout<<ans;
} 

为什么把

if(!dp[i-1][e[k].to])

换成

if(~dp[i-1][e[k].to])

就A了

2023/4/29 17:06
加载中...