蓝桥杯试题 算法训练 无聊的逗(C/C++)

充分利用二进制,代码如下:

#include <bits/stdc++.h>
using namespace std;
int a[15];
int b[1<<15];//把是否使用木棍的情况用二进制表示 
int n;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}//输入原始木棍长度 
	for(int i=0;i<(1<<n);i++)//列举每一种二进制情况 
	{
		for(int j=0;j<n;j++)
		{
			if(i&(1<<j))
			{
				b[i]=b[i]+a[j];
			}
		}
	}
	int ans=0;
	for(int i=0;i<(1<<n);i++)
	{
		for(int j=0;j<(1<<n);j++)
		{
			if(!(i&j)&&b[i]==b[j])//确保出现两种不同情况下的相同值 
			{
				ans=max(ans,b[i]);//不断更新最大值 
			}
		}
	}
	cout<<ans;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/m0_71934846/article/details/128717938