求助昨晚abc D
  • 板块学术版
  • 楼主After_light
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/9/3 12:30
  • 上次更新2023/11/2 23:15:06
查看原帖
求助昨晚abc D
554803
After_light楼主2023/9/3 12:30
#include<bits/stdc++.h>
#define ll long long
#define F(i,a,b) for(ll i=a;i<=b;i++)
#define R(i,a,b) for(ll i=a;i>=b;i--)
#define sc(a) scanf("%lld",&a)
#define ps(a) printf("%lld ",a)
#define pn(a) printf("%lld\n",a)
using namespace std;
const ll N=1e3+7;
ll n,d[N][N],f[(1<<17)+7],las[(1<<17)+7];
inline ll get_one(ll x){
	ll cnt=0;
	while(x){
		cnt+=(x%2==1);
		x/=2;
	}
	return cnt;
}
int main(){
	sc(n);
	F(i,1,n){
		F(j,i+1,n){
			sc(d[i][j]);
		}
	}
	f[0]=0;
	F(i,1,((1<<n)-1)){
		ll dk=get_one(i);
		if(dk&1){
			for(ll j=0;j<n;j++){
				if(((i>>j)&1)==1){
					if(f[i-(1<<j)]>=f[i]) las[i]=j+1;
					f[i]=max(f[i],f[i-(1<<(j))]);
				}
			}
		}
		else{
			for(ll j=0;j<n;j++){
				if(((i>>j)&1)==1){
					ll a=min(las[i-(1<<j)],j+1),b=max(las[i-(1<<j)],j+1);
					f[i]=max(f[i],f[i-(1<<(j))]+d[a][b]); 
				}
			}
		}
	}
	pn(f[(1<<n)-1]);
	return 0;
}

WA了一个,剩下AC,求帮/kel

2023/9/3 12:30
加载中...