千里红花一点绿
  • 板块灌水区
  • 楼主dhc7752
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/6/5 21:15
  • 上次更新2024/6/6 11:34:32
查看原帖
千里红花一点绿
1145395
dhc7752楼主2024/6/5 21:15
#include <bits/stdc++.h>
using namespace std;
bool a[23],b[23];
int n,c[23][23],d[23],aa[23],q = 0, p = 0;
inline bool dfe(int bb){
	for(int i = 1; i <= n; ++i) if(c[bb][i] && !d[i]) return false;
	return true;
}
inline void def(int bb,int cc,int qq){
	if(dfe(bb)){
		if(q < qq){
			q = qq;
			p = cc;
			for(int i = 1;i <= cc;++i) aa[i] = b[i];
		}
		return ;
	}
	for(int i = 1;i <= n;++i)
		if(c[bb][i] && !d[i]){
			d[i] = true;
			b[cc + 1] = i;
			def(i, cc + 1, qq + a[i]);
			d[i] = false;
		}
}

int main(){
    scanf("%d",&n);
    for(int i = 1;i <= n;++i) scanf("%d",&a[i]);
    for(int i = 1;i < n;++i) for(int j = i + 1; j <= n; ++j) scanf("%d",&c[i][j]);
	for(int i = 1;i <= n;++i){
		d[i] = true;
		b[1] = i;
		def(i, 1, a[i]);
		d[i] = false;
	}
	for(int i = 1;i <= p;++i) printf("%d ",aa[i]);
	printf("\n%d",q);
	return 0;
}

有没有大佬来指点一下P219 6

2024/6/5 21:15
加载中...