收获:

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

 /**************************************************************
Problem: 3668
User: idy002
Language: C++
Result: Accepted
Time:288 ms
Memory:804 kb
****************************************************************/ #include <cstdio>
#define max(a,b) ((a)>(b)?(a):(b)) int n, m;
unsigned past[][];
unsigned dp[][], top[]; int main() {
scanf( "%d%d", &n, &m );
for( int i=; i<; i++ ) {
past[i][] = ;
past[i][] = ;
}
for( int i=; i<=n; i++ ) {
char ch[];
unsigned t;
scanf( "%s%d", ch, &t );
for( int b=; b<; b++ ) {
if( ch[]=='A' ) {
past[b][] &= (t>>b)&;
past[b][] &= (t>>b)&;
} else if( ch[]=='O' ) {
past[b][] |= (t>>b)&;
past[b][] |= (t>>b)&;
} else {
past[b][] ^= (t>>b)&;
past[b][] ^= (t>>b)&;
}
}
}
if( m== ) {
unsigned ans = ;
for( int i=; i<; i++ )
ans |= past[i][]<<i;
printf( "%u\n", ans );
} else {
for( int b=; b<; b++ )
top[b] = (m>>b)&; int maxb=;
while( top[maxb]== ) {
dp[maxb][] = dp[maxb][] = dp[maxb+][]|(past[maxb][]<<maxb);
maxb--;
}
dp[maxb][] = dp[maxb+][]|(past[maxb][]<<maxb);
dp[maxb][] = dp[maxb+][]|(past[maxb][]<<maxb);
for( int i=maxb-; i>=; i-- ) {
for( int j=; j<=; j++ )
dp[i][] = max( dp[i][], dp[i+][]|(past[i][j]<<i) );
for( int j=; j<top[i]; j++ )
dp[i][] = max( dp[i][], dp[i+][]|(past[i][j]<<i) );
dp[i][] = dp[i+][]|(past[i][top[i]]<<i);
}
printf( "%u\n", max(dp[][],dp[][]) );
}
}

bzoj 3668 数位DP的更多相关文章

  1. bzoj 1833 数位dp

    很裸的数位dp. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defi ...

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

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

  3. BZOJ - 1026 数位DP

    中文题面,注意st是不可以放到dp里面的,否则每次solve都要清零 注意状态的转移要st&&i==0,因为子结构也可能是st(当高位取0时) 而st是必然合法的 #include&l ...

  4. BZOJ 3679 数位DP

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

  5. BZOJ 3209 数位DP

    思路: 先预处理出来组合数 按位做 枚举sum[x]是多少 注意Mod不是一个质数 //By SiriusRen #include <cstdio> using namespace std ...

  6. [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】

    题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...

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

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

  8. BZOJ.4513.[SDOI2016]储能表(数位DP)

    BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...

  9. bzoj 1026: [SCOI2009]windy数【数位dp】

    忘记limit不能记WA了一发-- 典型数位dp,变成work(r)-work(l-1),然后dfs的时候记录w当前位置,la上一个数选的什么,lm当前位是否有上限,ok当前位是否可以不考虑差大于等于 ...

随机推荐

  1. Strusts2笔记7--国际化

    国际化: 国际化是指,使程序在不做任何修改的情况下,就可以使用在不同的语言环境中.国际化在一般性项目中是不常用的.在编程中简称 i18n. 国际化是通过读取资源文件的形式实现的.资源文件的定义与注册, ...

  2. static, const 和 static const 变量的初始化问题

    const 常量的在超出其作用域的时候会被释放,但是 static 静态变量在其作用域之外并没有释放,只是不能访问. static 修饰的是静态变量,静态函数.对于类来说,静态成员和静态函数是属于整个 ...

  3. js如何查看元素类型

    <script type="text/javascript"> //定义变量temp var temp = Object.prototype.toString.appl ...

  4. quartz的一个误导

    quartz文档提到,如果在集群环境下,最好将配置项org.quartz.jobStore.txIsolationLevelSerializable设置为true 问题: 这个选项在mysql下会非常 ...

  5. ParameterizedType获取java泛型参数类型

    ParameterizedType getClass().getGenericSuperclass() 返回表示此 Class 所表示的实体(类.接口.基本类型或 void)的直接超类的 Type,然 ...

  6. scala中“_”的用法

    参见链接 http://blog.csdn.net/i6448038/article/details/50017427

  7. 数据库-mysql数据操作

    一:mysql 数据的插入 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...

  8. linux(vi)常用命令

    常用操作 系统命令 查看主机名 hostname 修改主机名(重启后无效) hostname yang 修改主机名(重启后永久生效) vi /ect/sysconfig/network 修改IP(重启 ...

  9. ASP .NET Core 2.0 MVC 发布到 IIS 上以后 无法下载apk等格式的文件

    ASP .NET Core MVC 发布到  IIS 上以后 无法下载apk等格式的文件 使用.NET Core MVC创建了一个站点,其他文件可以下载,但是后来又需求,就把手机端的apk合适的文件上 ...

  10. HttpRunner接口自动化测试框架

    简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试 ...