bzoj5108 [CodePlus2017]可做题 位运算dp+离散
[CodePlus2017]可做题
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 87 Solved: 63
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
4 0
3 7
5 0
Sample Output
已知的 a 序列为: X, X, 7, 0, 0, 其中X表示这个位置丢失了。一种可能的 a 序列为
0, 7, 7, 0, 0, 对应的 b 序列为 0, 7, 0, 0, 0, 和最小为 7。可以证明不存在和更小的情况
HINT
Source
题解,各个位置上的位运算是相互不影响的,
所以可以分开来dp,然后,对于相差两个即以上的可以抵消,
那么是需要特殊处理,一个的话默认为前面的或者0,数据范围比较大,需要离散化。
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio> #define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if (ch=='-') f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,b[],pre;
ll ans,f[][];
struct node{int id,val;}a[];
bool cmp(node a,node b){return a.id<b.id;}
int main()
{
n=read();m=read();n=;
for (int i=;i<=m;i++)
a[i].id=read(),a[i].val=read();
sort(a+,a+m+,cmp);
for (int i=;i<=m;i++)
{
if (a[i].id-pre->=){b[++n]=-;b[++n]=-;b[++n]=a[i].val;}
else if (a[i].id-pre==){b[++n]=-;b[++n]=a[i].val;}
else b[++n]=a[i].val;
pre=a[i].id;
}
f[][]=1e15;f[][]=;
for (int p=;p<=;p++)
{
for (int i=;i<=n;i++)
if (b[i]<)
{
f[i][]=min(f[i-][]+(<<p),f[i-][]+(<<p));
f[i][]=min(f[i-][],f[i-][]);
}
else
{
if (b[i]&(<<p))
{
f[i][]=f[i-][]+(<<p);
f[i][]=f[i-][];
}
else
{
f[i][]=f[i-][]+(<<p);
f[i][]=f[i-][];
}
}
ans+=min(f[n][],f[n][]);
}
printf("%lld",ans);
}
bzoj5108 [CodePlus2017]可做题 位运算dp+离散的更多相关文章
- bzoj5108: [CodePlus2017]可做题
Description qmqmqm希望给sublinekelzrip出一道可做题.于是他想到了这么一道题目:给一个长度为n的非负整数序列ai,你需 要计算其异或前缀和bi,满足条件b1=a1,bi= ...
- 【洛谷 P4934】 礼物 (位运算+DP)
题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...
- C#LeetCode刷题-位运算
位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 ...
- 剑指offer-面试题65-不用加减乘除做加法-位运算
/* 题目: 在不使用加减乘除的前提下,计算两个整数之和. 思路: 不能使用加减乘除则只能考虑位运算. x=num1^num2,则为抹掉进位的结果. y=num1&num2,为只有进位的结果. ...
- 【bzoj5108】[CodePlus2017]可做题 拆位+乱搞
题目描述 给出一个长度为 $m$ 的序列 $a$ ,编号为 $a_1\sim a_m$,其中 $n$ 个位置的数已经确定,剩下的位置的数可以任意指定.现在令 $b$ 表示 $a$ 的前缀异或和,求 $ ...
- 【做题记录】DP 杂题
P2577 [ZJOI2004]午餐 $\texttt{solution}$ 想到贪心: 吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 状态: \(f[i][j]\) 表示前 \(i\ ...
- 【CF908E】New Year and Entity Enumeration 位运算+DP
[CF908E]New Year and Entity Enumeration 题意:给定$M=2^m-1$,我们称一个集合S是好的,当且仅当它满足:1.$\forall a\in S,a\ \ma ...
- 51nod 1406 位运算/dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1406 1406 与查询 题目来源: CodeForces 基准时间限制: ...
- [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)
传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...
随机推荐
- wamp无法进入phpMyAdmin或localhost的解决方法
我用的是最新版的wampsever5,在win7(64位)下安装正常使用,没有无法进入phpMyAdmin的问题,但是我在虚拟机安装了win8(64位专业版),测试在win8下面的使用情况时,就有问题 ...
- WebForm中 页面传参的总结
页面与后台的数据传递是实现动态页面的前提---数据交互.无论是MVC还是WebFrom 都需要详细了解各种前后台的数据传输方式,熟悉每种方式的优缺点,这样才能提高网站的性能,技术上得到锻炼. 1.Fo ...
- Oracle 十大SQL语句
oracle数据库十大SQL语句 操作对象(object) /*创建对象 table,view,procedure,trigger*/ create object object ...
- AJPFX实现兔子问题
有一对小兔子,从第三个月长成开始每个月生一对小兔子,新出生的小兔子从第三个月长成开始每个月也生一对小兔子,假设所有的兔子都不会死,问每个月兔子的总数?(月数可以是6,12).大神看看我笨方法谢的对吗? ...
- fetch和axios区别,proxy代理配置
1.今天使用fetch调用接口时使用console.log(res.data)始终是undefined,使用anxios请求则可以成功请求到数据,非常奇怪,于是查了一圈,才搞明白是我自以为了,哎,浪费 ...
- 【HEVC帧间预测论文】P1.4 Motion Vectors Merging: Low Complexity Prediction Unit Decision
Motion Vectors Merging: Low Complexity Prediction Unit Decision Heuristic for the inter-Prediction o ...
- Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...
- [Redis] 基于redis的分布式锁
前言分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁. 可靠性首先,为了确保 ...
- ArrayList Vector LinkedList分析
1.创建 ArrayList 的底层是一个数组. ArrayList<String> list1 = new ArrayList<>(); list1.add("a ...
- uva1619 Feel Good
单调队列,滑动窗口 int t=0; while(scanf("%d",&n)==1){ if(t) printf("\n"); //有点方便 单调队列 ...