P2196 1,3,4WA
  • 板块题目总版
  • 楼主Logiking
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/4/5 23:04
  • 上次更新2023/11/5 00:58:51
查看原帖
P2196 1,3,4WA
427110
Logiking楼主2021/4/5 23:04

自己看题目写的,求大佬指点

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[30],f[25][25] = {0},b[25][25];
void dp(int n,int m){//输出矿洞
	if(n == 1)cout << 1;
	else{
		int i;
		for(i = 1;i < n; ++i){
			if(b[i][n] == (b[n][m] - a[m]))dp(i,n);
		}
	}
	 cout << " " << m;
}
int main()
{
    int n;
    cin >> n;
    int i,j,k;
    for(i = 1; i <= n; ++i){
    	cin >> a[i];
	}
    if(n == 1){//特判
    	cout << 1 << endl;
    	cout << a[1];
	}
	if(n == 2){//特判
		int p;
		cin >> p;
		if(p == 0)cout << 1 << endl << a[1];
		else
			cout << 1 << " " << 2 << endl << a[1] + a[2]; 
	}
	else
	{
	for(i = 1; i <= n -1; ++i){
		for(j = i+1; j <= n;++j){
			cin >> f[i][j];
		}
	}
	for(i = 1; i <= n-1; ++i){
		for(j = i+1; j <= n;++j){
			if(f[i][j]){//可以进入j矿洞
				if(i > 1){
				int max = 1;
				for(k = 1;k < i;++k){//找i矿洞的最大值
					if(b[k][i]){
						if(b[max][i] < b[k][i])max = k;
					}
				}
				b[i][j] += b[max][i] + a[j];
				}
				else
					b[i][j] += a[i]+a[j];
			}
		}
	}
	int max1 = 1,max2 = 1;
	for(i = 1; i <= n-1; ++i){//找最大值
		for(j = i+1; j <= n;++j){
			if(b[max1][max2] <= b[i][j]){
				max1 = i;
				max2 = j;
			}
		}
	}
	dp(max1,max2);
	cout << endl;
	cout << b[max1][max2];
}
    return 0;
}
2021/4/5 23:04
加载中...