传送门

题意:给出$N$个数和一个长为$M$、所有数在$[1,N]$范围之内的正整数序列$a_i$,求出这$N$个数的一种排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_{a_i}-p_{a_{i-1}}|$最小。$N \leq 20,M \leq 1000$


$N \leq 20$给了我们很明显的状压DP的信息,但是DP方程的思维难度还是有点大。

我们考虑按照数字从小到大地指定它在$p_i$中的位置。这样我们可以通过预处理某一个位置在$a_i$中相邻位置的数字的情况得到这一个数的贡献(也就是可以直接把绝对值符号拆开来计算它的贡献),这样子转移就会方便很多了。

设$f_i$表示已经指定了数字的序列$p$中的元素集合为$i$(eg.$i=10101$就表示指定了$p_1,p_3,p_5$,而$i=01011$表示指定了$p_1,p_2,p_4$),且对应的数为$N$个数中最小的若干个时,最小的难度值为多少。我们可以预处理$g_{i,j}$表示在序列$a$中与$i$相邻的且在集合$j$中的数的出现次数的总和(eg.如果有某一对相邻的数对为$2,3$,那么$g_{2,2^3}++,g_{3,2^2}++$),这样我们转移的时候只需要取$g_{k,i}-g_{k,2^N - 1 \, xor \, i}$就可以得到这一个数的贡献(也就是拆了绝对值之后的系数)。然后枚举转移点转移即可。

看到绝对值就要考虑一下从小到大然后拆掉绝对值符号算贡献呢qwq

 #include<bits/stdc++.h>
 using namespace std;

 ] , dp[ << ] , cnt[][ << ] , cnt1[ << ] , N , M;

 inline int lowbit(int x){
     return x & -x;
 }

 int main(){
     cin >> N >> M;
      ; i < N ; i++)
         cin >> now[i];
     ;
     while(M--){
         int x;
         cin >> x;
         x--;
         ){
             cnt[last][ << x]++;
             cnt[x][ << last]++;
         }
         last = x;
     }
     memset(dp , 0x3f , sizeof(dp));
     dp[] = ;
     sort(now , now + N);
      ; i <  << N ; i++)
          ; j < N ; j++)
             cnt[j][i] = cnt[j][i - lowbit(i)] + cnt[j][lowbit(i)];
      ; i <  << N ; i++){
         cnt1[i] = cnt1[i - lowbit(i)] + ;
          ; j < N ; j++)
              << j))
                 dp[i] = min(dp[i] , dp[i ^ ( << j)] + (cnt[j][i] - cnt[j][( << N) -  - i]) * now[cnt1[i] - ]);
     }
     cout << dp[( << N) - ];
     ;
 }

NowCoder110E Pocky游戏 状压DP的更多相关文章

  1. 牛客练习赛18E pocky游戏 状压dp

    正解:状压dp+辅助dp 解题报告: 来还债辣!NOIp之后还是轻松很多了呢,可以一点点儿落实之前欠下的各种东西一点点提升自己!加油鸭! 是个好题,可以积累套路,启发性强,而且很难 哦而且状压它也是个 ...

  2. CDOJ 1402 三角形棋盘上的博弈游戏 状压DP

    三角形棋盘上的博弈游戏 题目连接: http://mozhu.today/#/problem/show/1402 Description 柱爷有天上课无聊,于是和同桌卿学姐一起下一种奇特的棋: 棋盘如 ...

  3. JZYZOJ1384 种花小游戏 状压dp

    http://172.20.6.3/Problem_Show.asp?id=1384  最开始以为是dfs然后超时了,然后调了半天调成dp,还不如再写一遍... 代码 #include<iost ...

  4. [Usaco2007 Open]Fliptile 翻格子游戏 状压dp

    n,m<=15,直接搞肯定不行,考虑一行一行来, 每一行的状态只与三行有关,所以从第一行开始枚举,每一次让下面一行填上他上面那行的坑 最后一行必须要同时满足他自己和他上面那行,否则舍去 #inc ...

  5. 洛谷 P1278 单词游戏 【状压dp】

    题目描述 Io和Ao在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何一个单词开始. 任何单词禁止说两遍,游戏中只 ...

  6. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  7. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  8. ZOJ3802 Easy 2048 Again (状压DP)

    ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  9. zoj3802:easy 2048 again(状压dp)

    zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...

随机推荐

  1. 【读书笔记】iOS-基带攻击

    一,iOS设备中的蜂窝网络通信栈运行在专门的芯片上,这个芯片就是数字基带处理器. 参考资料:<黑客攻防技术宝典-iOS实战篇>

  2. web全栈架构师[笔记] — 02 数据交互

    数据交互 一.http协议 基本特点 1.无状态的协议 2.连接过程:发送连接请求.响应接受.发送请求 3.消息分两块:头.体 http和https 二.form 基本属性 action——提交到哪儿 ...

  3. VUE 实现复制内容到剪贴板功能

    注: 依赖第三方插件 clipboard 一.安装插件 npm install vue-clipboard2 --save 二.全局注入(main.js) import VueClipboard fr ...

  4. ArcGIS地图文档优化 mxdPerfstat工具使用体验

    经常有客户会咨询到如何提高地图的显示性能.为何ArcMap刷新地图那么缓慢.为何地图服务响应要等待10多秒? 诸如这些问题,虽然它们的表象都是相似的,但是往往在分析排查问题的时候,我们发现背后的原因是 ...

  5. Android学习笔记----Java字符串MD5加密

    代码如下: /** * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全 * * @param str * @return */ public static ...

  6. redis 在Linux下的安装与配置

    redis在Linux下的安装与配置 by:授客  QQ:1033553122 测试环境 redis-3.0.7.tar.gz 下载地址: http://redis.io/download http: ...

  7. Oracle 11gR2_database在Linux下的安装

    Oracle 11gR2_database在Linux下的安装 by:授客 QQ:1033553122 由于篇幅问题,采用链接分享的形式,烦请复制以下网址,黏贴到浏览器中打开,下载 http://pa ...

  8. python2 与 python3 如何实现共存

    1.现在我本机系统已内置python2.6 2.下载进行源码安装 复制链接下载到 /root/mypackage,解压 接着 mkdir /usr/local/python3 然后在解压后的文件夹内执 ...

  9. Excel快捷键大全 Excel2013/2010/2007/2003常用快捷键大全

    一个软件最大的用处是提高工作效率,衡量一个软件的好坏,除了是否出名之外,最主就是能否让一个新手更快的学会这个软件和提高工作速度.就拿Excel表格来说吧,平常办公中我们经常会用它来制作表格,统计数据或 ...

  10. SQL mysql优化

    慢查询 如何通过慢查日志发现有问题的SQL? 查询次数多且每次查询占用时间长的SQL pt-query-digest分析前几个查询 IO大的SQL pt-query-diges分析中的Rows exa ...