萌新求助,不知道哪错了
查看原帖
萌新求助,不知道哪错了
736891
Eternality楼主2022/10/16 10:35
#include<bits/stdc++.h>
using namespace  std;
#define int long long

int n,m,k;
int v[20],ex[20][20],f[20][1<<20];
int ans;

int lowbit(int x)
{
	int ans=0;
	while(x)
	{
		ans++;
		x-=x&-x;
	}
	return ans;
}

signed main()
{
	scanf("%lld%lld%lld",&n,&m,&k);
	for(int i=0;i<n;i++)
	{
		scanf("%lld",&v[i]);
		f[i][1<<i]=v[i];
	}
	for(int i=1;i<=k;i++)
	{
		int x,y,z;
		scanf("%lld%lld%lld",&x,&y,&z);
		ex[x][y]=z;
	}
	for(int i=0;i<(1<<n);i++)
	{
		if(lowbit(i)>=m)continue;
		for(int j=0;j<n;j++)
		{
			if(i&(1<<j))
			{
				for(int k=0;k<n;k++)
				{
					if(!(i&(1<<k)))
					{
						f[k][i|(1<<k)]=max(f[k][i|(1<<k)],f[j][i]+v[k]+ex[j][k]);
					}
				}
			}
		}
	}
	for(int i=0;i<(1<<n);i++)
	{
		for(int j=0;j<n;j++)
		{
			if((i&(1<<j))&&lowbit(i)==m)
			{
				ans=max(ans,f[j][i]);
			}
		}
	}
	cout<<ans<<"\n";
	return 0;
}
2022/10/16 10:35
加载中...