P2915奶牛混合起来+dp个人近期复习总结

状压dp 近期 个人总结

  • 表示无奈的是发现状压dp 在你谷上省选难度的和提高+的,完全是两回事。。
  • 重要区分就在于,省选难度一般不会让你你一眼看出来,哈哈啊哈哈状压dp大法好!!而提高加的总会有一些善意的数据且巾帼总结呵呵一般在1<<16–1<<18居多

首先来个例题

  1. 你谷的题(因为我都是在你谷上刷的)

P2915 [USACO08NOV]奶牛混合起来

乾坤大挪移

描述::

  • 状态压缩一级水题,感觉上的话(比铺地砖还要好写)
  • 适合oier学习入门
  • 我绝对不会告诉你我刚学的时候,看这题一脸懵呢!

约翰家有N头奶牛,第i头奶牛的编号是Si,每头奶牛的编号都是唯一的。这些奶牛最近 在闹脾气,为表达不满的情绪,她们在挤奶的时候一定要排成混乱的队伍。在一只混乱的队 伍中,相邻奶牛的编号之差均超过K。比如当K = 1时,1, 3, 5, 2, 6, 4就是一支混乱的队伍, 而1, 3, 6, 5, 2, 4不是,因为6和5只差1。请数一数,有多少种队形是混乱的呢?

样例数据zz
输入样例#1:
4 1
3
4
2
1

输出样例#1:
2

然后最关键的就是这一句话

N (4 <= N <= 16)

我想呀,这个也太明显了。。。zz先发个代码,按机房大佬的说法代码最直接了。。。

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
using namespace std;
void read(long long  &x){
	x=0; char c=getchar(); int f=1;
	for (;!isdigit(c);c=getchar()) if (c=='-') f=-f;
	for (;isdigit(c);c=getchar()) x=x*10+c-'0';x*=f;}
long long n,k,amap[30],dp[1<<20][20],cow[30];
int main(){
	read(n); read(k); 
	REP(i,1,n) {read(amap[i]); cow[i]=1<<(i-1); dp[1<<(i-1)][i]=1;}
	int limi=(1<<(n))-1;
	REP(i,1,limi) {  REP(j,1,n) {
			if (cow[j]&i)  REP(kk,1,n) {
					if ((cow[kk]|i)!=i) {
						if (abs(amap[j]-amap[kk])>k) {
							dp[(i|(cow[kk]))][kk]+=dp[i][j];}}}}}
	long long ans=0;
	REP(i,1,n) ans+=dp[limi][i]; cout<<ans<<endl;
} 

怕我后期看不出来,要注释一波;
先是最基本的快读。。
蒟蒻不会打封装的读入|><| 我实在是太弱了
amap[]数组的意思是第i只牛的编号。。。
cow[]表示的是第i只牛,加入队列时的要 | 的位置
怎么说呢,比如 10000010 这样一个01串我们表示的就是第二只牛和第,,懒得数了只牛已经放好了的状态,当我们把这个01串与000010000, 相 | 后,几可以得出1—1–1中间的0自动神略(手动滑稽)的状态
dp表示的是 dp[ ][ ]第一个是枚举到的状态,,第二个是这个状态是第几只牛刚发进去,,,为什么要真么dp呢

  1. 首先啊,这是状压而且是n属于1–16的状压,既然给了你那么明显的数据提示那么,dp里面一般就会带有状态表示(我说的是一般,一般,一般!)
  2. 一般这类题型是不会让你直接就一维dp就可以刷爆的。好吧有特例(你以为我会告诉你?)但这题也得要一点辅助的,,,
  3. 那么根据题意,看关键限制条件(要大于K),那么如果我们已经把前面的几头牛塞进状态中了,就不会对现在的dp转移有影响有影响的只能是刚放进去的,因为他的编号直接决定了你能否进入这个大家庭,,(we are family!!)
    呀,写了够多了。。那就水一波吧
    下面就是常用的提高加 状压dp模板呵呵

REP(1,0/1,limi(状态的最后表示形式))
REP(枚举的位置(要变换的编号)<这题中就是第几头牛的>)
加大判定 IF (这头牛没有放进去(呸呸,这个位置上没有被站位)) 继续往下
REP (dp[ ][ ]两个格子中后面的一维中代表的数)再加个大判定
然后状态转移
然而呵呵还是有特例zz
然后就恭喜你你差不多AC了

没多少时间了先记在这
下面留几条相似的题目

命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷。
你来过,然后你走后,只留下星空。

-----有点不友好哈哈哈

招聘新老师

------这题是真的练手

当然这类状压我认为应该比铺地砖类的简单。。。

来几题(这类状压格式思路基本不同)

收玉米了

打仗了

嘿嘿
请你下象棋。。
这题和本类dp很像,但当时我觉得应该也可以用铺地砖这种。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值