大佬们给萌新改改代码吧,自己手模了样例是没问题的,但是一运行就出错
查看原帖
大佬们给萌新改改代码吧,自己手模了样例是没问题的,但是一运行就出错
181715
gjh303987897楼主2021/10/18 17:07
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 21
using namespace std;
int read(){
	int x=0,f=1; char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+ch^48;
		ch=getchar(); 
	}
	return x*f;
} 
//从后先前进行dp,边界问题就是f[n]=w[n];   f[i]=max(f[i]+w[i])
int n,map[maxn][maxn],d[maxn],f[maxn],w[maxn];
int main()
{
	n=read();
	int js=1;
	for(int i=1;i<=n;i++) w[i]=read();
	for(int i=1;i<=n-1;i++){
		js=i;
		for(int j=n-1;j>=i;j--){
			js++; map[i][js]=read();
		}
	}
	f[n]=w[n];
	int maxx=0;
	for(register int i=n-1;i>=1;i--){
		maxx=0; int route=0;
		for(register int j=1;j<=n;j++){
			if(maxx<f[j]&&map[i][j]==1){
				maxx=f[j]; route=j;
			}
		}
		f[i]=w[i]+maxx; d[i]=route;
	}
	maxx=0;
	int begin=0;
	for(register int i=1;i<=n;i++){
		if(maxx<f[i]){
			maxx=f[i];
			begin=i;
		} 
	}
	cout<<begin;
	while(d[begin]!=0){
		cout<<d[begin];
		begin=d[begin];
	}
	cout<<endl<<maxx;
	return 0;
}
2021/10/18 17:07
加载中...