HDU - 5119 Happy Matt Friends(DP)
来源:互联网 发布:史玉柱巨人网络股份 编辑:程序博客网 时间:2024/06/03 16:00
题目大意:给你N个数,问有多少个子集,满足子集内所有数的xor和大于等于M
解题思路:用dp[i][j]表示前i个数,xor和为j的情况有多少种
则dp[i][j] = dp[i - 1][j],表示第i个数不选
dp[i][j ^ val[i]] += dp[i][j],表示选了第i个数
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N = (1 << 20) + 10;LL dp[41][N];int n, m, cnt, cas = 1;int val[41];void init() { scanf("%d%d", &n, &m); int Max = 0; for (int i = 0; i < n; i++) { scanf("%d", &val[i]); Max = max(Max, val[i]); } cnt = 0; while (Max) { cnt++; Max /= 2; }}void solve() { int All = 1 << cnt; for (int i = 0; i < n; i++) for (int j = 0; j < All; j++) dp[i][j] = 0; dp[0][0] = dp[0][val[0]] = 1; for (int i = 1; i < n; i++) for (int j = 0; j < All; j++) { dp[i][j] += dp[i - 1][j]; dp[i][j ^ val[i]] += dp[i - 1][j]; } LL ans = 0; for (int i = m; i < All; i++) ans += dp[n - 1][i]; printf("Case #%d: %lld\n", cas++, ans);}int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0;}
0 0
- HDU 5119 Happy Matt Friends(DP)
- hdu 5119 Happy Matt Friends(dp)
- HDU - 5119 Happy Matt Friends(DP)
- HDU 5119 Happy Matt Friends(dp)
- HDU 5119 Happy Matt Friends(DP)
- HDU 5119 Happy Matt Friends(dp)
- HDU--5119Happy Matt Friends+dp
- HDU 5119 Happy Matt Friends(DP)
- HDU 5119 Happy Matt Friends - DP
- hdu 5119 Happy Matt Friends【dp】
- -----背包 DP hdu 5119- Happy Matt Friends
- HDU 5119 Happy Matt Friends(DP)
- hdu 5119 Happy Matt Friends
- HDU-5119-Happy Matt Friends
- HDU 5119 Happy Matt Friends
- HDU 5119 Happy Matt Friends
- hdu 5119 Happy Matt Friends
- HDU 5119 Happy Matt Friends
- poj 3748 水题位操作
- JProfiler入门使用教程:Eclipse集成
- Action、Menus、ToolBars主窗体构成的实现
- 【C++】primer plus 练习7.5
- tomcat pipline设计模式
- HDU - 5119 Happy Matt Friends(DP)
- 广播与服务day2笔记
- MySQL数据备份之mysqldump使用
- gitbub的使用
- Eclipse Xml编译错误Referenced file contains errors - spring-beans-4.0.xsd
- IOS代理协议与委托
- Oracle11gR2 for Linux
- Android多个Activity切换时其生命周期中的方法执行顺序
- TableViewController for IOS8