40分求救,正向dp
查看原帖
40分求救,正向dp
787834
QUYI楼主2023/3/7 19:14
#include<stdio.h>
int main() {
	int n;
	scanf("%d",&n);
	int num[25];
	for(int i=0; i<n; i++) {
		scanf("%d",&num[i]);
	}
	int connect[25][25]; 
	for(int i=0; i<n-1; i++) {
		for(int j=i+1; j<n; j++) {
			scanf("%d",&connect[i][j]);
		}
	}
	int sum[25];
	int path[25];
	for(int i=n-1; i>=0; i--) {
		sum[i]=num[i];
		for(int j=i+1; j<n; j++) {
			if(connect[i][j]&&num[i]+sum[j]>sum[i]) {
				sum[i]=num[i]+sum[j];
				       path[i]=j;
			}
		}
	}
	int max=0,pos=0;
	for(int i=0; i<n; i++) {
		if(sum[i]>max) {
			max=sum[i];
			pos=i;
		}
	}
	while(1) {
		printf("%d ",pos+1);
		if(path[pos]==0) {
			break;
		}
		pos=path[pos];

	}
	printf("\n%d",max);
	return 0;
}
2023/3/7 19:14
加载中...