蓝桥杯补题 状态压缩DP

蓝桥杯差一点进了国赛,考前还玩了一天游戏,现在想想真的难受。

先把题补了吧,5.11加油!

蓝桥杯补题 状态压缩DP_第1张图片

一开始一点头绪都没有,看了别人的题解发现是压状DP

动态规划博大精深。。。。

其实好像很好理解

压缩状态的DP有几个特征,

1. 有n组数据 那么可能性总数是  2^n ,就是每个数据取还是不取的问题, 

或者是结构由n个数据组成, 结果可能性也是  2^n 因为每种结果中每个数据有或者没有

其实就是针对集合的dp 使集合最终满足一定条件

2.其他特征也想不出来QAQ  可以从数据入手,比如一个数据很大,一个数据很小,就是n个物品有

1<

dp的模板好像也不是很固定

就是

 for(int i=0;i

就是很难想, 做dp题目一定要动笔写状态转移方程!!!

应该是AC代码了

#include
#include
#include
#include
using namespace std;
int dp[1048596];
int candy[105];
int n,m,k;
int main(){
	memset(dp,-1,sizeof(dp));
	cin>>n>>m>>k;
	int temp;
	int sum=0;
	for(int i=0;i>temp;
			sum=sum|(1<<(temp-1));
		}
		//cout<

这题想法是吧一袋糖压缩成一个状态, 也便于存储,一个int存一袋糖,然后用上面的dp模板

在第二个循环for(int j ;j<(i<

dp[ j ]代表需要的最少包的糖数能够达到这个状态。

在之前输入每包糖的状态的时候就初始化一下dp[ 每包糖的压缩状态 ] =1 

 

你可能感兴趣的:(ACM)