nyoj1189 yougth和他的朋友们(滚动数组运用)
yougth和他的朋友们
- 描述
-
yougth的朋友们各自有一个魔法值x,现在yougth想从这些朋友中挑出一些,使得这些朋友的魔法值的异或和大于等于m。这样的组合共有多少种?
- 输入
-
多组数据
每组数据首先两个数n和m,表示朋友的个数和要大于等于的值,((1 ≤ n ≤ 40, 0 ≤ m ≤ 10^6)
接下来n个数表示每个人的魔法值x(0 ≤ x ≤ 10^6) - 输出
- 输出满足条件的方案数
- 样例输入
-
3 2 1 2 3 3 3 1 2 3
- 样例输出
-
4 2
- 提示
-
第一个样例
1^2 = 3
1^3 = 2
2
3共四个满足条件,故直接输出4
-
思路:定义dp[i][j]为把 i 放入后得到 j 方案数
-
dp[i][j]=dp[i-1[j]+dp[i-1][j];
-
由于数据有点大 看了下younth的博客 发现得用了滚动数组优化
-
也的时候还得注意 RE 也就是1048000后面的数据异或后数据可能超过数组范围(跪哭了)
-
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; long long dp[2][1200005]; int a[45]; int main() {int n,m,i,j;while(~scanf("%d%d",&n,&m)){for(i=1; i<=n; i++)scanf("%d",&a[i]);memset(dp,0,sizeof(dp));dp[0][0] = 1;for(i=1; i<=n; i++)for(j=0; j<1048576; j++)//{dp[i%2][j]=dp[(i-1)%2][j]+dp[(i-1)%2][j^a[i]];}long long ans = 0;for(i=m;i<1048576;i++)ans+=dp[n%2][i];printf("%lld\n",ans);} }
nyoj1189 yougth和他的朋友们(滚动数组运用)相关推荐
- 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB 写的 ===2018.9.6=== 这一次算理解深一点了 ...
- 高级打字机【主席树】【滚动数组】【块状链表】
题目大意: 一个计算机支持一下三中操作: TT xx:在文章末尾打下一个小写字母xx. UU xx:撤销最后的xx次修改操作. QQ xx:询问当前文章中第xx个字母并输出. InputInput 7 ...
- 《滚动数组》---滚动数组思想,运用在动态规划当中
滚动数组是DP中的一种编程思想.简单的理解就是让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用.起到优化空间,主要应用在递推或动态规划中(如01背包问题).因为DP题目是一 ...
- hdu 1024(滚动数组优化)
本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题. 解题思路:dp[i][j]表示前j个数分成i组,且j在第i组里的最大值. dp[i][j] = max{dp[i][j-1]+a[ ...
- HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...
- 滚动数组~\(≧▽≦)/~
今天第一次用了滚动数组,缘由要从一道题说起:POJ 1159 Palindrome 题意:给你一个字符串,求对字符串最少添加几个字符可变为回文串. 分析: 简单做法是直接对它和它的逆序串求最长公共子序 ...
- Gym 100507G The Debut Album (滚动数组dp)
The Debut Album 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/G Description Pop-group & ...
- 动态规划 0-1背包问题 滚动数组
定义 dp[j]是从物品0到i中挑选物品,放进容量为j的背包中的最大价值总和. 初始化 int dp[maxn]; memset(dp, sizeof(dp), -0x3f3f3f3f); 一维滚动数 ...
- Top Secret Task(dp+滚动数组)
传送门: 题目 dp[i][j][k] 表示 考虑到第i个数 计算前j个数的和 进行了k次操作 则有 若不把第i个数放入前j个数中 dp[i][j][k] = dp[i-1][j][k] 若把第i个数 ...
- HDU - 1024 Max Sum Plus Plus 最大m段子段和+滚动数组优化
给定n个数字,求其中m段的最大值(段与段之间不用连续,但是一段中要连续) 例如:2 5 1 -2 2 3 -1五个数字中选2个,选择1和2 3这两段. dp[i][j]从前j个数字中选择i段,然后根据 ...
最新文章
- Spring NamedParameterJdbcTemplate 详解
- sql server数据库查询超时报错
- JS 中判断一个对象是否为数组对象?
- Spring MVC 入门基础(一)
- Illustrator 教程,如何在 Ai 中创建一个新文档?
- laravel 5 : Class 'input' not found
- 谷歌插件如何下载到本地
- 硬件基础知识(10)---元器件选型规范大全
- Revit 和 ArchiCAD 在软件设计理念方面的对比
- 支付宝支付接口的使用
- dp在约会上是什么意思_第一次约会,女生让你碰这三个部位,十有八九就是对你有意思...
- Python算24点
- idv和vdi的优劣势_IDV和VDI区别
- django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066
- mysql 字段值分布很少的字段要不要加索引
- 新手入门PS人像磨皮教程
- OpenCL基础(一)
- [Windows] Flash.Player|AX|PP|32.0.0.142 去广告 不跳更新版
- 正则表达式(一) search
- 全国计算机考试 mysql_全国计算机等级考试二级MySQL试题及答案