数学_位运算
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
POJ 3252 Round Numbers
题目分析 找到2个给定的数之间二进制的表示中0比一大的个数。平时的数位dp用十进制进行分解,得到每一位的10进制数,这道题很明显按2进制进行分解就可以了,但是需要前导0要进行特别的判断,比如000101,前面的3个0很明显是不需要算进去的,在记忆化搜索是多加一个变量就可以了。 #include <cstdio> #include <cstring> #include <iostream> #in原创 2016-07-22 20:37:30 · 323 阅读 · 0 评论 -
SPOJ BALNUM - Balanced Numbers
题目分析 这道题的状态同样不好取,因为要求每一个奇数的个数都要为偶数,每一个偶数的位数都要为奇数,又因为只有10个数(0~9),又因为没个数只有3种状态,分别是没有(0),奇数个(1),偶数个(2),这样我们就利用3进制进行压缩就可以了,3的10次方不超过60000,因此直接开60000即可,这样dp[i][j]的i表示当前处理到了第i为,j表示当前(0~9)对应的状态。搞了3天这个了,现在感觉原创 2016-07-23 16:16:35 · 948 阅读 · 0 评论 -
HYSBZ 3668: [Noi2014]起床困难综合症
题目分析 很明显,这道题不能直接枚举0~m左右数,很明显会超时,那么我们只能从高到低枚举每一位,最多有32位,每一位有2个状态(0,1),所以时间复杂度是64*10^5,注意如果这一位能取0达到1,那么必定取0,如果这一位取1则要判断是否超过m。 #include <cstdio> #include <cstring> #include <iostream> #include <algorith原创 2016-07-13 15:04:49 · 285 阅读 · 0 评论 -
POJ 3254 Corn Fields(状态压缩dp)
题目分析 状态压缩通常用来处理那些状态很多导致不能容易表达出来,于是需要通过压缩状态进行表示,又利用比如位运算处理一些东西,很容易将结果求出来。我的第一道状态压缩题,注释写的很详细。 #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namesp原创 2016-08-22 09:31:46 · 291 阅读 · 0 评论