《七月集训》第三十一天 状态压缩
526.优美的排列
class Solution {
public:
int countArrangement(int n) {
vector<int> dp(1 << n);
dp[0] = 1;
for(int mask = 1; mask < (1 << n); ++mask) {
int num = __builtin_popcount(mask); //代表当前序列的长度
for(int i = 0; i < n; ++i) {//寻找mask适合的位置
if(mask & (1 << i) && (num % (i + 1) == 0 || (i + 1) % num == 0)) {
dp[mask] += dp[mask ^ (1 << i)]; // mask^(1<<i) 表示第mask^(1<<i)是空缺的且num能够放进去,加上这种方案数
//cout << dp[mask] << endl;
}
}
}
return dp[(1<<n) - 1];
}
};
...全文
相关推荐
华中科大2011状态压缩DP和树形DP
"华中科大2011年的ACM暑期集训中,陈益波博士讲解了关于状态压缩DP和树形DP的专题。他介绍了动态规划在树结构上的应用,重点在于叶到根的方向,即从子节点向根节点传递信息来找到最优解。"在这次
七月集训(第31天) —— 状态压缩
第31天 状态压缩
国家集训队动态规划整理
**状态压缩DP**:当状态数量巨大但实际有效的状态较少时,可以使用位运算进行状态压缩,如求解子序列和问题。4. **树形DP**:适用于处理树结构的问题,如求解树的直径、最小生成树等。
ioi2018集训队作业1
本文汇总了多篇IOI2018中国国家集训队第一阶段作业的解题报告,涵盖多个算法问题如Snuke Line、Blackout、Last Marble等。内容包括题目解析、解题思路、动态规划、图论、博弈论
2009ACM多校联合暑期集训(11)解题报告 感谢各校的努力
这些题目来源于2009年ACM多校联合暑期集训的第11场训练,主要涉及算法设计和实现,涵盖了图论、哈希表、动态规划、最小割、二进制运算等多个方面。1001题是关于表达式求值的问题。


