最简单的暴力dp就是f[i][j]表示到i异或和为j的最小花费。

然后我们发现两堆大小为i,j的石子合并,可以更新到一堆大小为k=i,j最高公共的1以下都是1,以上是i|j,权值为v1+v2的石子。

我们可以打表发现这个段数其实很小,其实也可以严谨的证明或者感性理解,但是我不会。。

所以我们记录当前的所有f值以及端点然后暴力转移就可以了。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <map>
#define N 100500
#define int long long
using namespace std;
int n,m,q,cnt1,cnt2,ans;
struct data{
int v,l;
data(){}
data(int x,int y){v=x;l=y;}
bool operator < (const data & a)const{
if(v==a.v)return l>a.l;
return v<a.v;
}
data operator + (data a){
data b=data(v+a.v,l|a.l);
for(int i=;~i;i--)if(l&a.l&(<<i))
{b.l|=(<<i)-;break;}
return b;
}
}f[N<<],d;
signed main(){
//freopen("test.in","r",stdin);
scanf("%lld%lld",&n,&m);
cnt1++;
f[]=data(,);
register int i,j;
for(i=;i<=n;i++){
scanf("%lld%lld",&d.v,&d.l);
for(j=;j<=cnt1;j++)f[cnt1+j]=f[j]+d;
sort(f+,f+*cnt1+);
for(cnt2=,j=;j<=*cnt1;j++)
if(f[j].l>f[cnt2].l)f[++cnt2]=f[j];
cnt1=cnt2;
}
scanf("%lld",&q);
int x;
while(q--){
scanf("%lld",&x);
ans=-;
for(int i=;i<=cnt1;i++)if(f[i].l>=x)
{ans=f[i].v;break;}
printf("%lld\n",ans);
}
return ;
}

loj553 「LibreOJ Round #8」MINIM的更多相关文章

  1. loj #547. 「LibreOJ β Round #7」匹配字符串

    #547. 「LibreOJ β Round #7」匹配字符串   题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...

  2. [LOJ#531]「LibreOJ β Round #5」游戏

    [LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...

  3. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  4. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  5. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  6. [LOJ#525]「LibreOJ β Round #4」多项式

    [LOJ#525]「LibreOJ β Round #4」多项式 试题描述 给定一个正整数 k,你需要寻找一个系数均为 0 到 k−1 之间的非零多项式 f(x),满足对于任意整数 x 均有 f(x) ...

  7. [LOJ#526]「LibreOJ β Round #4」子集

    [LOJ#526]「LibreOJ β Round #4」子集 试题描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两 ...

  8. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...

  9. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

随机推荐

  1. 简单了解AJAX

    // ajax的俩个版本: var xmlhttp; if(window.xmlHttpRequest){ xmlhttp = new xmlHttpRequest(); }else{ xmlhttp ...

  2. decode ways(动态规划)

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  3. 通向从容之道——Getting things done读书笔记

    一.主要的两个目的:         1. 抓住所有一切需要处理的事情:         2. 训练自己在接受一切"输入信息"的前期作出决定.   二.目前的问题:         ...

  4. 实现CString的Format功能,支持跨平台

    #include <string>#include <stdio.h> #include <stdarg.h> std::string& std_strin ...

  5. classes目录中没有class文件的一个原因

    可能是你的build设置有问题:比如本来有的jar被删除的情况下.build不会报错,但是classes目录下什么都没有.

  6. 上传本地代码及更新代码到GitHub教程

    上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo " ...

  7. D3中的each() 以及svg defs元素 clipPath的使用

    each() 方法允许我们定制对选择集中DOM元素的处理行为: selection . each ( func ) 参数 func 是调用者定义的函数,在d3中被称为 访问器/accessor . d ...

  8. TCP的流量控制和拥塞处理

    1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失.所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收.    利用滑动窗口机制可以 ...

  9. vue目录结构

    构建新的项目后生成目录结构如下图: 1.build目录下: 最终发布de代码存放的位置 2.config 配置目录,包括端口号等.我们初学可以使用默认的 3.node_modules npm加载的项目 ...

  10. git merge与 git rebase区别及实例

    接Git分支创建与合并,在分支合并时,有两种方式:git merge 和git rebase. git merge:将两个分支,合并提交为一个新提交,并且新提交有2个parent. git rebas ...