参考官方题解

  1. #include<bits/stdc++.h>
  2. #define rep(i,j,k) for(register int i=j;i<=k;i++)
  3. #define rrep(i,j,k) for(register int i=j;i>=k;i--)
  4. using namespace std;
  5. string s[100]={"H","He","Li","Be","B",
  6. "C","N","O","F","Ne",
  7. "Na","Mg","Al","Si","P",
  8. "S","Cl","Ar","K","Ca",
  9. "Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr",
  10. "Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La",
  11. "Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl",
  12. "Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm"};
  13. int num[111],ans[111][111],vec[111],que[111],p[1<<18|1];
  14. int dp1[1<<18|1],dp2[1<<18|1];
  15. int n,k,sum1,sum2;
  16. string str;
  17. bool go(){
  18. memset(dp1,0,sizeof dp1);
  19. memset(dp2,0,sizeof dp2);
  20. // memset(dp2,-1,sizeof dp2);
  21. rep(S,1,(1<<n)-1){
  22. rep(i,1,n){
  23. if((S>>(i-1))&1){
  24. dp1[S]+=vec[i];
  25. }
  26. }
  27. }
  28. rep(S,1,(1<<n)-1){
  29. dp2[S]=-1;
  30. for(int S0=S;S0;S0=(S0-1)&S){
  31. if(dp2[S^S0]!=-1&&que[dp2[S^S0]+1]==dp1[S0]){
  32. dp2[S]=dp2[S^S0]+1;
  33. p[S]=S^S0;
  34. }
  35. }
  36. }
  37. if(dp2[(1<<n)-1]!=k) return 0;
  38. int x=(1<<n)-1;
  39. rrep(i,k,1){
  40. rep(j,1,n){
  41. if(1<<(j-1)&(x^p[x])){
  42. ans[i][++num[i]]=j;
  43. }
  44. }
  45. x=p[x];
  46. }
  47. return 1;
  48. }
  49. inline void print(){
  50. cout<<"YES"<<endl;
  51. rep(i,1,k){
  52. cout<<s[vec[ans[i][1]]-1];
  53. rep(j,2,num[i]){
  54. cout<<"+"<<s[vec[ans[i][j]]-1];
  55. }
  56. cout<<"->"<<s[que[i]-1]<<endl;
  57. }
  58. }
  59. int main(){
  60. while(cin>>n>>k){
  61. sum1=sum2=0;
  62. memset(num,0,sizeof num);
  63. rep(i,1,n){
  64. cin>>str;
  65. rep(j,0,100-1){
  66. if(str==s[j]){
  67. vec[i]=j+1;
  68. sum1+=j+1;
  69. break;
  70. }
  71. }
  72. }
  73. rep(i,1,k){
  74. cin>>str;
  75. rep(j,0,100-1){
  76. if(str==s[j]){
  77. que[i]=j+1;
  78. sum2+=j+1;
  79. break;
  80. }
  81. }
  82. }
  83. if(sum1==sum2&&go()) print();
  84. else cout<<"NO"<<endl;
  85. }
  86. return 0;
  87. }

Codeforces - 71E 状压DP的更多相关文章

  1. Codeforces 678E 状压DP

    题意:有n位选手,已知n位选手之间两两获胜的概率,问主角(第一个选手)最终站在擂台上的概率是多少? 思路:一看数据范围肯定是状压DP,不过虽然是概率DP,但是需要倒着推:我们如果正着推式子的话,初始状 ...

  2. Codeforces 8C 状压DP

    题意:有个人想收拾行李,而n个物品散落在房间的各个角落里(n < 24).现在给你旅行箱的坐标(人初始在旅行箱处),以及n个物品的坐标,你一次只能拿最多两个物品,并且拿了物品就必须放回旅行箱,不 ...

  3. Codeforces 1215E 状压DP

    题意:给你一个序列,你可以交换序列中的相邻的两个元素,问最少需要交换多少次可以让这个序列变成若干个极大的颜色相同的子段. 思路:由于题目中的颜色种类很少,考虑状压DP.设dp[mask]为把mask为 ...

  4. CodeForces 11D(状压DP 求图中环的个数)

    Given a simple graph, output the number of simple cycles in it. A simple cycle is a cycle with no re ...

  5. codeforces 1185G1 状压dp

    codeforces 1185G1. Playlist for Polycarp (easy version)(动态规划) 传送门:https://codeforces.com/contest/118 ...

  6. Codeforces 1155F 状压DP

    题意:给你一张图,问最少保留多少条边,使得这张图是边双联通分量. 思路:如果一个点集中的点已经是边双联通分量,那么从这个点集中的点x出发,经过若干个不是点集中的点,回到点集中的点y(x可能等于y),那 ...

  7. codeforces Diagrams & Tableaux1 (状压DP)

    http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...

  8. Codeforces Gym 100015F Fighting for Triangles 状压DP

    Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...

  9. Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP

    Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...

随机推荐

  1. WCF4.0 –- RESTful WCF Services

    转自:http://blog.csdn.net/fangxinggood/article/details/6235662 WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构 ...

  2. UCOSII在STM32F407上的移植

    1.ucosii移植准备工作 1.1准备基础工程: 移植的时候需要一个基础工程,为了方便起见我们就选取跑马灯实验,作为ucossii移植的基础工程. 1.2Ucossii源码: 1)Micrium官网 ...

  3. Monkey稳定性测试环境搭建说明

    一.安装Java环境 安装Java环境-JDK:下载地址:http://pan.baidu.com/s/1pJ6Yqs7,jdk安装解压即可. 二.设置环境变量 双击下载的JDK ,设置安装路径.这里 ...

  4. js原型链prototype与__proto__以及new表达式

    对象模型的细节 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Details_of_the_Object_Model

  5. HDU 3729 I'm Telling the Truth (二分匹配)

    题意:给定 n 个人成绩排名区间,然后问你最多有多少人成绩是真实的. 析:真是没想到二分匹配,....后来看到,一下子就明白了,原来是水题,二分匹配,只要把每个人和他对应的区间连起来就好,跑一次二分匹 ...

  6. Java SimpleDateFormat工具类

    package AnimalDemo; import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  7. (转)jQuery基础之选择器

    原文地址: http://www.cnblogs.com/webmoon/p/3169360.html 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器 ...

  8. Ubuntu配置ip和dns后还是不能访问外网

    https://blog.csdn.net/WFping518/article/details/81011722

  9. System.Net.Http

    System.Net.Http DotNet菜园 占个位置^-^ 2018-11-10 09:55:00修改 这个HttpClient的学习笔记一直迟迟未记录,只引用了其他博主的博客链接占个位置,但被 ...

  10. ECS服务里或者阿里云服务器的二级域名设置方法

    我们要实现的效果是,xuxinshuai.abc.com ,具体怎么实现,看下面的流程 第一步:备案域名要有,假如就是www.abc.com 第二步:网站的服务器是IIS的情况下,在部署网站时,需要设 ...