收获:

  1、如果有很多位操作,并且不包含+-×/等高级运算,那么可以一位一位考虑,如果求一个最优解,可以尝试逐位确定,这道题因为原始攻击值有范围,那么就需要数位DP。

 1 /**************************************************************
 2     Problem: 3668
 3     User: idy002
 4     Language: C++
 5     Result: Accepted
 6     Time:288 ms
 7     Memory:804 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #define max(a,b) ((a)>(b)?(a):(b))
12
13 int n, m;
14 unsigned past[32][2];
15 unsigned dp[32][2], top[32];
16
17 int main() {
18     scanf( "%d%d", &n, &m );
19     for( int i=0; i<32; i++ ) {
20         past[i][0] = 0;
21         past[i][1] = 1;
22     }
23     for( int i=1; i<=n; i++ ) {
24         char ch[10];
25         unsigned t;
26         scanf( "%s%d", ch, &t );
27         for( int b=0; b<32; b++ ) {
28             if( ch[0]=='A' ) {
29                 past[b][0] &= (t>>b)&1;
30                 past[b][1] &= (t>>b)&1;
31             } else if( ch[0]=='O' ) {
32                 past[b][0] |= (t>>b)&1;
33                 past[b][1] |= (t>>b)&1;
34             } else {
35                 past[b][0] ^= (t>>b)&1;
36                 past[b][1] ^= (t>>b)&1;
37             }
38         }
39     }
40     if( m==0 ) {
41         unsigned ans = 0;
42         for( int i=0; i<32; i++ )
43             ans |= past[i][0]<<i;
44         printf( "%u\n", ans );
45     } else {
46         for( int b=0; b<32; b++ )
47             top[b] = (m>>b)&1;
48
49         int maxb=30;
50         while( top[maxb]==0 ) {
51             dp[maxb][1] = dp[maxb][0] = dp[maxb+1][1]|(past[maxb][0]<<maxb);
52             maxb--;
53         }
54         dp[maxb][1] = dp[maxb+1][1]|(past[maxb][1]<<maxb);
55         dp[maxb][0] = dp[maxb+1][1]|(past[maxb][0]<<maxb);
56         for( int i=maxb-1; i>=0; i-- ) {
57             for( int j=0; j<=1; j++ )
58                 dp[i][0] = max( dp[i][0], dp[i+1][0]|(past[i][j]<<i) );
59             for( int j=0; j<top[i]; j++ )
60                 dp[i][0] = max( dp[i][0], dp[i+1][1]|(past[i][j]<<i) );
61             dp[i][1] = dp[i+1][1]|(past[i][top[i]]<<i);
62         }
63         printf( "%u\n", max(dp[0][0],dp[0][1]) );
64     }
65 }

View Code

转载于:https://www.cnblogs.com/idy002/p/4498719.html

bzoj 3668 数位DP相关推荐

  1. BZOJ 1833 数位DP

    思路: 数位DP f[i][j][k]表示走到第i位 开头位j 数字k 出现的次数 $f[i][j][k]+=f[i-1][l][k];$ $f[i][j][j]+=base[i]$ calc的时候要 ...

  2. bzoj 3209 数位DP+欧拉定理

    枚举1的个数,统计有那么多1的数的个数 1 /************************************************************** 2 Problem: 320 ...

  3. BZOJ 3679 数位DP

    思路: f[i][j]表示i位数乘积为j的方案数 j的取值最多5000多种,那就开个map存一下好了 f[i][mp[k*rec[j]]]+=f[i-1][j]; //By SiriusRen #in ...

  4. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...

  5. BZOJ 3329 Xorequ (数位DP、矩阵乘法)

    BZOJ 3329 Xorequ (数位DP.矩阵乘法) 手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/arti ...

  6. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)

    BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Description 正如你所知 ...

  7. [BZOJ 1026] [SCOI 2009] Windy数 【数位DP】

    题目链接:BZOJ - 1026 题目分析 这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题.. 对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a ...

  8. [数位dp] bzoj 3209 花神的数论题

    [数位dp] bzoj 3209 花神的数论题 题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdl ...

  9. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

最新文章

  1. 大雁蛋人工孵化的方法_大鹅繁殖有哪些方法,您了解吗?
  2. 客户端回传事件接口IPostBackEventHandler
  3. 如何关注掘金的所有小伙伴
  4. 使用NSCondition实现多线程同步
  5. css样式表中的样式覆盖顺序(转)
  6. java中的 =运算符_(二十七)、java中的运算符
  7. linux下无法执行PHP命令,错误 php: command not found
  8. javascript操作cookie实例
  9. 华龙电音基调网_华龙电音基调查询器下载(最好用的电音基调查询器) v1.4免费版...
  10. 谷歌服务安装包_安卓手机安装谷歌服务框架和Google Play傻瓜式教程 100%好用
  11. 《c语言 从入门到放弃》,从入门到放弃的?单片机这样做很容易!
  12. 电力拖动自动控制系统_专插本专业全面分析:电子工程及其自动化
  13. 《2020职场绿茶图鉴》
  14. 想网站稳定运营?不可不知 DDoS的攻击原理与防御方法
  15. android button 图片与文字一起
  16. English_do
  17. 考研英语阅读分析--03Text3
  18. Tcp/ip协议 详解
  19. halcon C++编程 第22讲 图像镜像 tcy
  20. android把音乐存到sd卡上,如何将音乐文件从原始文件夹保存到SD卡中android

热门文章

  1. android页面统计代码,android流量统计(示例代码)
  2. Leecode 136. 只出现一次的数字
  3. cba比赛比分预测_【CBA直播】深圳vs广东前瞻:深圳战广东再掀反攻?
  4. C语言项目:图形马赛克处理技术
  5. 家用计算机注意哪些参数,电脑小白买内存条要注意哪些?主要看哪些参数?这些知识要掌握...
  6. 光端机的作用有哪些?
  7. poe交换机的作用和优点
  8. 如何有效维护PDH光端机的常见故障?
  9. [渝粤教育] 西南科技大学 经济数学1 在线考试复习资料
  10. 【渝粤教育】广东开放大学 商法 形成性考核 (40)