当前位置: 首页 > news >正文

蓝桥杯备考:特殊01背包问题——》集合subset

我们划分成两个集合,实际上我们只需要看一部分就行了,也就是从集合的所有元素里挑出恰好满足集合总和的一半儿,当然,如果我们的集合总和是奇数的话,我们是无论如何也挑不出刚好一半儿的,因为我们没有小数,然后这道题就变成了01背包问题,我们要从集合的所有元素里挑出恰好等于sum/2的所有搭配 由于我们选的是有重复的,最后结果要除2

我们按步骤做

step1 确定状态表达 f[i][j]表示从1到i的数里挑选出恰好等于j的搭配方案

step2 推导状态转移方程

step3:初始化,我们只需要初始第一列为1就行了

step4:答案就是f[n][sum/2] /2

 

#include <iostream>
using namespace std;
const int N = 40,M = 1000;
typedef long long ll;
ll f[N][N];

int main()
{
	int n;cin >> n;
	int sum  = ((1+n)*n)/2;
	if(sum&1){
		cout << 0 << endl;
		return 0;
	}
	sum/=2;
	f[0][0] = 1;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 0;j<=sum;j++)
		{
			f[i][j] = f[i-1][j];
			if(j>=i) f[i][j]+=f[i-1][j-i];
		}
	}
	cout << f[n][sum]/2 << endl;
	
	
	
	
	
	return 0;
}

相关文章:

  • 两款软件助力图片视频去水印及图像编辑
  • PHP转GO Go语言环境搭建(Day1) 常见问题及解决方案指南
  • Node.js系列(3)--集群部署指南
  • K8S-etcd服务无法启动问题排查
  • Android audio(8)-native音频服务的启动与协作(audiopolicyservice和audioflinger)
  • 网络华为HCIA+HCIP VLAN间通信
  • ubuntu下TFTP服务器搭建
  • [GHCTF 2025]Goph3rrr [127.0.0.1绕过][env命令查找flag]
  • 如何让焦虑为城市供能 | 杂谈
  • windows上LISTENER监听器中显示“监听程序不支持服务”
  • hackmyvm-Smol
  • C++ 语法之函数和函数指针
  • 百度OCR调用记录
  • 荣耀手机怎么录制屏幕?屏幕录制后为视频加水印更有“安全感”
  • 复习JVM
  • STM32之快乐的Event Recorder功能
  • Docker 部署RabbitMQ
  • MySQL日期转字符串,字符串转日期的函数
  • GraphDPI:通过互信息最大化进行图表示学习来消除部分标签歧义
  • SpringBoot之如何集成SpringDoc最详细文档
  • 外交部答澎湃:美方攻击抹黑中加关系与合作的卑劣图谋不会得逞
  • 汪明荃,今生不负你
  • 两部门发布外汇领域行刑反向衔接案例,织密金融安全“防护网”
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • A股三大股指收涨:军工股掀涨停潮,两市成交近1.5万亿元
  • 央行行长详解降息:将通过利率自律机制引导商业银行相应下调存款利率