状压dp
hhhcbw
Hello World!!!
展开
-
状压dp(一)——#10172. 「一本通 5.4 练习 1」涂抹果酱
题目链接:https://loj.ac/problem/10172解题思路就和国王问题一样,只不过国王是二进制,这题需要转化为三进制,然后从k往前dp,再从k往后dp,两个方案数相乘即是答案。AC代码#include <iostream>#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const原创 2020-08-28 12:11:01 · 218 阅读 · 0 评论 -
状压dp(二)——#10173. 「一本通 5.4 练习 2」炮兵阵地
题目链接:https://loj.ac/problem/10173解题思路本题也与国王类似,只不过他需要看前面两行的状态,因此dp需要记本行与前一行的状态,才能转移,否则,如果只记录本行的状态,会导致错误。因为前面两个dp的状态可能不能同时取最大。AC代码#include <iostream>#include <stdio.h>#include <cstring>#include <algorithm>#include <vector&g原创 2020-08-28 16:20:04 · 162 阅读 · 0 评论 -
状压dp(三)——#10174. 「一本通 5.4 练习 3」动物园
题目链接:https://loj.ac/problem/10174解题思路挺难想的状压dp题,我们看到只有5是可以状压的,所以我们就从这里入手,设dp[i][j]表示以i为结尾的连续5个围栏动物状态为j时的最多满足人数,以i结尾,举例即i=7,则对应连续5个为7,6,5,4,3。我们发现dp在i时的状态可由在i-1的状态推出,dp[i][j]=max(dp[(i&15)<<1],dp[(i&15)<<1|1])+cal[i][j]。cal[i][j]表示以i为结尾原创 2020-08-29 08:58:21 · 202 阅读 · 0 评论