P8687 [蓝桥杯 2019 省 A] 糖果

~~~~~ P8687 蓝桥杯 2019 省 A 糖果 ~~~~~ 总题单链接

思路

~~~~~ 发现 k ≤ 20 , m ≤ 20 k\le20,m\le 20 k≤20,m≤20,考虑状压DP。

~~~~~ 预处理 g i gi gi 表示第 i i i 包糖有哪几种糖果。

~~~~~ 设 d p i dpi dpi 表示在 i i i 状态下最少要买几包糖。

~~~~~ 对于第 i i i 包糖,枚举所有状态 j j j, d p g \[ i ∣ j ] = m i n ( d p g \[ i ∣ j ] , d p j + 1 ) dpg\[i|j]=min(dpg\[i|j],dpj+1) dpg\[i∣j]=min(dpg\[i∣j],dpj+1)。

代码

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll n,m,Q,g[105],dp[(1ll<<20)+5];

signed main(){
	ios::sync_with_stdio(false);
	
	cin>>n>>m>>Q;
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=Q;j++){
			ll k;cin>>k;
			g[i]|=(1ll<<(k-1));
		}
	}
	
	memset(dp,0x3f,sizeof(dp));
	dp[0]=0;
	
	for(ll i=1;i<=n;i++)
		for(ll j=(1ll<<m)-1;j>=0;j--)
			dp[g[i]|j]=min(dp[g[i]|j],dp[j]+1);
	
	cout<<(dp[(1ll<<m)-1]<=n?dp[(1ll<<m)-1]:-1);
	
	return 0;
}
相关推荐
apocelipes1 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron3 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩4 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹5 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术10 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望11 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰11 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
地平线开发者1 天前
J6B vio scenario sample
算法
BothSavage1 天前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法