ACM-12月3日周日周末训练心得

    经过将近一周的状压DP,一开始做的比较慢还在摸索阶段,对几道题的理解感觉还不是很周到,比如专题里的W钥匙计数之一,这道题其实是用递推的思路去找规律,设lock[n]计做n个凹槽时,符合要求的钥匙总数。将yi[n]计做n个凹槽时,第n个凹槽为1时符合要求的钥匙总数。将er[n]计做n个凹槽时,第n个凹槽为2时符合要求的钥匙总数。且1=4,2=3;对与第n个凹槽,有两种情况。

1.前n-1个凹槽以构成钥匙,那么对于第n个凹槽而言,无论第n个凹槽为1/2/3/4,都有lock[n-1]种情况。

 

2.前n-1个凹槽未构成钥匙,加了第n个凹槽后才符合钥匙规则,那么分两种情况
    A.当第n个凹槽为 2/3时,前面n-1个凹槽必须为1/4构造而成的,出去两种全为1/4的情况,即2^(n-1)-2种情况
    B.当第n个凹槽为1/4时,前面n-1个凹槽的构成有多种情况,将这多种情况分析清楚:
假设第n个凹槽为1:
    则前面n-1个凹槽的构成情况有如下几种
   {
       A1.前n-1个凹槽由4种类型组成,但未有相邻两个凹槽高度差为3的。
       A2.前n-1个凹槽由4种类型组成,有相邻两个凹槽高度差为3的。
       B1.前n-1个凹槽由3种类型组成,但未有相邻两个凹槽高度差为3的。
       B2.前n-1个凹槽由3种类型组成,有相邻两个凹槽高度差为3的。
       C1.前n-1个凹槽由2种类型组成,但未有相邻两个凹槽高度差为3的。
       C2.前n-1个凹槽由2种类型组成,有相邻两个凹槽高度差为3的。
       D. 前n-1个凹槽由1种类型组成。
    }
由已知条件“前n-1个凹槽未构成钥匙,加了第n个凹槽后才符合钥匙规则”,可以将A2,B2,C2,D的全部情况排除,推得结论n-1个凹槽上必须为4,才符合已知条件。即:A1+B1+C1=all-(A2+B2+C2+D)=1*4^(n-2)-(one[n-1]+1*2^(n-2)-1+1) 
综合以上两种情况:
    yi[n]=4^(n-2)-(yi[n-1]+2^(n-2))+lock[n-1]
    er[n]=2^(n-1)-2+lock[n-1]

 

    lock[n]=2*(yi[n]+er[n])

    还有H题,这道题的意思是编写一个程序使产生的功率和最大,这个题目对于每个粒子有存在和消失两种状态,自然总的状态数有2^n种。 对于某种状态,如果用普通的表示,自然有dp[0][1][0]……[1](其中1表示存在,0表示消失),因为每个粒子只有0和1两种值,此处采用二进制进行状态压缩。 接下来考虑对于某个状态10001011,如果第一1要变成0,自然是考虑这个粒子和现存的粒子进行碰撞,然后找能达到的最大值。我们记这个值为GetMax(state, now)(其中state是当前二进制状态,now是由1转为0的那一位)。于是考虑状态转移方程,对于状态10001,必然由状态11001或10101或10011转换而来,自然对于state,可以由某个0位变成1的状态forestate转换而来。所以:dp[state] = max{dp[forestate] + GetMax(forestate, now)}这里就要采用记忆化搜索进行求解。初始状态M = (1<<n)^0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值