HDU5119(DP)
2015-10-07 19:24
417 查看
求n个数,取出其中若干个使其异或和大于等于m的方案数。
有个简单的优化就是把当前异或到得所有的结果存起来。
有个简单的优化就是把当前异或到得所有的结果存起来。
#include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const long long maxn = 1024*1024; int dp[maxn][42]; int num[maxn], cnt; bool vis[maxn]; int a[44]; int main() { int n,m; int t; int kase=0; scanf("%d",&t); while(t--) { scanf ("%d%d",&n,&m); memset (vis, 0, sizeof vis); cnt = 0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } memset (dp, 0, sizeof dp); dp[0][0]=1; num[cnt++] = 0; vis[0] = 1; for(int i=1;i<=n;i++) { for(int j=0;j<cnt;j++) dp[num[j]][i]=dp[num[j]][i-1]; for(int j=0;j<cnt;j++) { dp[num[j]^a[i]][i]+=dp[num[j]][i-1]; if (!vis[num[j]^a[i]]) vis[num[j]^a[i]] = 1, num[cnt++] = num[j]^a[i]; } } long long ans=0; for(int j=m;j<maxn;j++) ans+=dp[j] ; printf("Case #%d: ", ++kase); printf("%lld\n",ans); } return 0; }
相关文章推荐
- Web APi之认证(Authentication)两种实现方式【二】(十三)
- SQL Server ->> CLR编程问题汇总
- hdu4751Divide Groups 二分图判断
- IOS谓词--NSPredicate
- 毕业一年(这个总结来的比较晚)
- 1006实验一实验报告
- 九九乘法
- Java中的静态分派与动态分派
- Two Sum
- 数据密集型 和 cpu密集型 event loop
- hdu 3395 Special Fish 最大费用流
- undefined reference to 'pthread_create'问题解决
- vim打开文件时显示行号
- svn 使用配置详解
- Redis内存使用优化和存储
- Java泛型T的应用 获取T类型
- hadoop_hbase Java API 介绍及使用示例
- 数字在排序数组中出现的次数
- 对于大学生应该如何选择软件测试方面的企业?
- redis部署使用