题目传送门 1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了。这个状态不好想,dp[s1][s2]表示s1二进制表示下至少有1位老师的科目集合 4 s2...
分类:
其他好文 时间:
2015-08-10 18:00:03
阅读次数:
163
题意:设性质P:一个数能够整除它二进制表示下的1的个数。求[1,N]中满足性质P的数的个数。N<=10^19。思路:数位DP。首先这个数最多有64位,我们可以枚举1的个数x,然后求可以整除x的数的个数。设dp[i][j][k][w]表示从最高位枚举到i位,现在已经构成的数模x余多少(这里是关键,只用考虑余数),现在已经用了k个1,w=0表示现在枚举的这个数已经小于N了,w=1表示从最高位到第i位都与...
分类:
其他好文 时间:
2015-08-09 22:32:23
阅读次数:
150
【0】GCC将源代码转化成可执行代码的流程
(1)C预处理器cpp扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;
(2)编译器ccl产生两个源代码的汇编代码:*.s;
(3)汇编器as将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)
(4)链接器ld将目标代码与实现库函数的代码合并,最终产生可...
分类:
其他好文 时间:
2015-08-08 21:28:25
阅读次数:
189
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5358
题意:
分析:首先要知道[log2(x)]+1代表x的位数,而且根据题意不会超过35,那么枚举位数i:1~35。对于每一位i找到区间[x,y],使得S(x,y)的二进制表示的位数等于i,此时的贡献为i*(x+y)。那么对于每一个i,怎么找出所有符合条件的区间[x,y]?1~n枚举起点x,那么y会...
分类:
其他好文 时间:
2015-08-08 00:00:31
阅读次数:
323
位运算是对整型的二进制表示的每一位进行操作。位运算的操作数与结果都是整型量。java中的位运算符注意:java的运算通常是对32位的二进制整数的运算,这里为了简单只列出了8位。示例java程序:publicclassC2_10
{
publicstaticvoidmain(Stringargs[])
{intx,y,z,a,b;
a=22;
b=3..
分类:
其他好文 时间:
2015-08-07 20:20:49
阅读次数:
126
/**
* 功能:给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数。
* (一个略大一个略小。)
*/
三种方法:
方法一:蛮力法
方法二:位操作法
/**
* 方法:位操作法
* 思路:获取后一个较大的数
* 1)计算c0和c1。c1是拖尾1的个数,c0是紧邻拖尾1的作坊一连串0的个数。
* 2)将最右边、...
分类:
其他好文 时间:
2015-08-06 13:17:24
阅读次数:
236
题目:解释代码(n&(n-1))==0的具体含义
1)(A&B)==0的含义
A和B的二进制表示的同一位置绝不会同为1。
2)n和n-1
若n的最低有效位为1,减去1后为0,其余为均相同,不符合要求。n的最低有效位为0,减去1时,必须向高位借1。
3)(n&(n-1))==0的含义
n的最高有效位为1,其余位为0。因此,n的值是2的某次方。
所以,(n...
分类:
其他好文 时间:
2015-08-06 13:15:27
阅读次数:
170
该题其实是个DP,可能数据比较水,队友排序后从大的开始取都过了。。
我们来说说正解,一开始其实我已经写出来了,只是有一个地方导致了一直在输出一个不是数字的值,赛后才发现是我用memset对一个double类型的数组清-1的原因 ,改了一下就对了 。 直接开一维数组,用二进制表示集合的方法来表示哪些木棍被选取了 。 很简单的状态压缩DP 。
我用的记忆化搜索,该题还可以用三重循环地推...
分类:
其他好文 时间:
2015-08-02 21:37:14
阅读次数:
124
问题一解法: 我们知道求N的阶乘结果末尾0的个数也就是说我们在从1做到N的乘法的时候里面产生了多少个10,我们可以这样分解,也就是将从0到N的数分解成因式,再将这些因式相乘,那么里面有多少个10呢?其实我们只要算里面有多少个5就可以了? 因为在这些分解后的因子中,能产生10的可只有5和2相乘了,由于...
分类:
其他好文 时间:
2015-08-01 20:25:36
阅读次数:
105
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2.
1、可能引起死循环的解法
这是一道很基本的考察二进制和位运算的面试题。题目不是很难,面试官提出问题之后,我们很快形成一个基本的思路:先判断证书二进制表示中最右边一位是不是1.接着把输入的证书右移一位,此时原来处于从右边树起的第二位被移到最后一位,再判断是...
分类:
编程语言 时间:
2015-07-30 09:36:42
阅读次数:
152