题目链接
题目类型:动态规划
题目来源:2016 Multi-University Training Contest 6
题目分析
题目大意
给出$n$个数字,问存在多少组组合,使组合必然有某两个数字,必然没有指定两个数,且组合内的数之和为$m$
解析
看了题解之后,发现还有这么神奇的设置状态的方法。
$dp[i][j][x][y]$表示的是,对于第$i$个数的情况,该情况内的所有数之和为$j$,有$x$个数字必然取,有$y$个数字必然不取。这样对于当前的数字,有四种状态,必选当前数字,必然不选当前数字,可以选当前数字,可以不选当前数字,然后确定好边界进行状态转移即可。
分析一下为什么要设置这样的DP数组,首先要枚举所有数,所以有第一维长度为$n$的数组,第二维控制数之和(有的情况下也可以当成花费之类的),第三维表示当前必然选择了的数字个数,第四维表示当前必然不选的数字的个数。对于类似的题,可以通过不同的维数来把握要控制的条件数量,每一维的长度为当前条件的情况数量。把握好这一段的内容,想到这个状态转移其实并不是很难的还是。此外,要值得注意的是DP临界情况的确定
代码
1 |
|