洛谷都AC了,一本通80分
查看原帖
洛谷都AC了,一本通80分
490978
小超手123楼主2022/4/4 09:31

洛谷代码

#include<bits/stdc++.h>
using namespace std;
int n,ans;
int p[210];
int a[210][210];
int f[210]; //f[i]表示从i出发能挖到的最大的地雷数 
int lj[210];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>p[i];
	for (int i=1;i<n;i++)  
        for (int j=i+1;j<=n;j++)  
            scanf("%d",&a[i][j]);  
	f[n]=p[n];
	for(int i=n-1;i>=1;i--){
		int x;
		int maxn=0;
		for(int j=i+1;j<=n;j++){
			if(a[i][j]==1){
				if(f[j]>maxn){
					maxn=f[j];
					x=j;
				}
			}
		}
		f[i]=maxn+p[i];
		lj[i]=x;
	}
	int dx;
	for(int i=1;i<=n;i++){
		if(f[i]>ans){
			ans=f[i];
			dx=i;
		}
	}
	while(dx!=0){
		cout<<dx<<" ";
		dx=lj[dx];
	}
    cout<<endl<<ans;
	return 0;
}

ybt代码

#include<bits/stdc++.h>
using namespace std;
int n,ans;
int p[210];
int a[210][210];
int f[210]; //f[i]表示从i出发能挖到的最大的地雷数 
int lj[210];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>p[i];
	while(1){
		int u,v;
		cin>>u>>v;
		if(u==0&&v==0)break;
		a[u][v]=1;
	}
	f[n]=p[n];
	for(int i=n-1;i>=1;i--){
		int x;
		int maxn=0;
		for(int j=i+1;j<=n;j++){
			if(a[i][j]==1){
				if(f[j]>maxn){
					maxn=f[j];
					x=j;
				}
			}
		}
		f[i]=maxn+p[i];
		lj[i]=x;
	}
	int dx;
	for(int i=1;i<=n;i++){
		if(f[i]>ans){
			ans=f[i];
			dx=i;
		}
	}
	while(dx!=0){
		cout<<dx;
		if(lj[dx]!=0)cout<<"-";
		dx=lj[dx];
	}
    cout<<endl<<ans;
	return 0;
}
2022/4/4 09:31
加载中...