http://codeforces.com/contest/585/problem/D

1、meet in the middle 里上半部分搜索为d1()、下半部分搜索为d2(),

d1()的内容很简单:搜索,直到超过边界,记录状态值,

d2()的内容也很简单:搜索,直到超过边界,合并d1()状态值,按照题目做出处理

2、设d1()搜索出的三个值为a、b、c,d2()为a'、b‘、c’,要求a+a‘==b+b'、a+a'==c+c',

但因为a、a'不在一个函数里,我们变形为a-b=b'-a'、a-c=c'-a'。

为了方便,我们把a-b、a-c放入一个数字s里,a'-b'、a'-c'放入一个数字s'里,有s==s'即可得到三个attitude相等。

因为a-c最大为2e7,我们把a-b扩大2e7倍再与a-c相加就得到s

3、题目还要求最后的attitude不仅要相等,还要尽量最大,

对于每个s,我们记录其a值,将<s,a>存入HashMap,就可在d2()里得到a+a'

题目还要求打印步骤,对于每个状态s,我们用一个3进制数表示步骤,将<s,k>存入HashMap

 1     static final int max = (int) (3e7 + 100);
 2     static int[] a = new int[1000];
 3     static int[] b = new int[1000];
 4     static int[] c = new int[1000];
 5     static int n;
 6
 7     static HashMap<Long, Integer> maa = new HashMap<>();
 8     static HashMap<Long, Integer> mk = new HashMap<>();
 9
10     //最终答案的a值
11     static long ansaa = Long.MIN_VALUE;
12     //表示d1各步骤的3进制数、表示d2各步骤的3进制数
13     static long ansk1, ansk2;
14
15     public static void main(String[] args) {
16
17         IO io = new IO();
18         n = io.nextInt();
19         for (int i = 0; i < n; i++) {
20             a[i] = io.nextInt();
21             b[i] = io.nextInt();
22             c[i] = io.nextInt();
23         }
24
25         d1(0, 0, 0, 0, 0);
26         d2(n / 2 + 1, 0, 0, 0, 0);
27         if (ansaa == Long.MIN_VALUE) io.println("Impossible");
28         else {
29             String[] s = new String[]{"LM", "LW", "MW"};
30             int[] ans = new int[n];
31             //第一步被无限*3,最后一步没有*3,不难发现是倒叙
32             for (int i = n / 2; i >= 0; i--, ansk1 /= 3) ans[i] = (int) ansk1 % 3;
33             for (int i = n - 1; i > n / 2; i--, ansk2 /= 3) ans[i] = (int) ansk2 % 3;
34             for (int i = 0; i < n; i++) io.println(s[ans[i]]);
35         }
36     }
37
38     //[0,n/2],k是记录步骤的3进制
39     static void d1(int task, int aa, int bb, int cc, int k) {
40         if (task > n / 2) {
41             long s = (aa - bb) * max + aa - cc;
42             if (maa.containsKey(s) == false || maa.get(s) < aa) {
43                 maa.put(s, aa);
44                 mk.put(s, k);
45             }
46             return;
47         }
48         d1(task + 1, aa + a[task], bb + b[task], cc, k * 3);
49         d1(task + 1, aa + a[task], bb, cc + c[task], k * 3 + 1);
50         d1(task + 1, aa, bb + b[task], cc + c[task], k * 3 + 2);
51     }
52
53
54     //[n/2+1,n-1]
55     static void d2(int task, long aa, int bb, int cc, long k) {
56         if (task > n - 1) {
57             long s = (bb - aa) * max + cc - aa;
58             if (maa.containsKey(s)) if (maa.get(s) + aa > ansaa) {
59                 ansaa = maa.get(s) + aa;
60                 ansk1 = mk.get(s);
61                 ansk2 = k;
62             }
63             return;
64         }
65         d2(task + 1, aa + a[task], bb + b[task], cc, k * 3);
66         d2(task + 1, aa + a[task], bb, cc + c[task], k * 3 + 1);
67         d2(task + 1, aa, bb + b[task], cc + c[task], k * 3 + 2);
68     }

转载于:https://www.cnblogs.com/towerbird/p/11240217.html

D. Lizard Era: Beginning相关推荐

  1. Lizard Era: Beginning

    Lizard Era: Beginning 题面翻译 有 n ( n ⩽ 25 ) n(n \leqslant 25) n(n⩽25)个任务和三个人,每次任务给出每个人能得到的值,每次任务选两个人,使 ...

  2. era翻译_英语单词era是什么意思,英文单词查询era,在线单词era翻译

    era 简明英汉词典 era [5iErE] n. 时代, 纪元, 时期, [地]代 基本词义 Era [5iErE] 耐蚀耐热合金钢 基本词义 ERA =Electrical Research As ...

  3. era翻译_era是什么意思_era的翻译_音标_读音_用法_例句_爱词霸在线词典

    全部 四级 六级 考研 This is something that is very much well worth considering here in the modern era. 出自-20 ...

  4. pandas将dataframe日期数据列的日期转化为日期当月第一天(每月1号)的日期并生成新的数据列(Setting date to beginning of month in dataframe)

    pandas将dataframe日期数据列的日期转化为日期当月第一天(每月1号)的日期并生成新的数据列(Setting date to beginning of month in dataframe) ...

  5. Beginning IOS 7 Development Exploring the IOS SDK - Handling Basic Interface Fun

    Beginning IOS 7 Development Exploring the IOS SDK 目前使用的是Objective-C,用这本书,简单记录一下 第一章,图书简介 第二章,简要介绍使用x ...

  6. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers  总结 本章节向你介绍了SP平台上event recei ...

  7. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)...

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  8. Windows蓝屏(Beginning Dump of Physical Memory)

    为什么Windows 2000/XP会蓝屏? NT内核的操作系统采用的是分层管理结构(层又称为模式),主要有用户层(User Mode)和内核层(Kernel Mode),我们可以通过下面这个形象的比 ...

  9. python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因

    今天在用到SOAPpy做webservice的过程当中,要进行安装SOAPpy.SOAPpy0.11版本安装没有问题,但在安装其以上版本时发现SyntaxError: from __future__  ...

  10. An Introduction to Hashing in the Era of Machine Learning

    In December 2017, researchers at Google and MIT published a provocative research paper about their e ...

最新文章

  1. 在线作图|FAPROTAX数据库在线注释
  2. 封装方法公共文件common.js
  3. [watevrCTF-2019]Pickle Store
  4. HighNewTech:2019.08.08华为发布—面向2025十大趋势
  5. 【转】java 自动装箱与拆箱
  6. 阿里云服务器本地连接(windows) 阿里云服务器和本地的磁盘共享数据
  7. 带你了解zabbix整合ELK收集系统异常日志触发告警~
  8. linux网卡限速tc,linux tc 对本机网卡限速
  9. iphone开发之C++和Objective-C混编
  10. java string 栈_Java堆和栈的区别(String类)
  11. java日期格式化、解析
  12. Shell脚本编程之(五)条件判断式
  13. 幕客网学习摘要记录1
  14. 刚刚,2020年中国信息通信技术服务大会盛大召开!
  15. 基于PaddleX的垃圾分类识别
  16. PHP 下载文件的方法(指定路径)
  17. 2019产品数据管理(PDM)技术说明
  18. 隐藏高德地图左下角LOGO
  19. 卡方检验——离散型特征相关性分析
  20. HDU - 4598 Difference

热门文章

  1. 瑞幸咖啡“生死劫”:财务数据曾惊天造假,一年巨亏几十亿美元
  2. Rabbit MQ 基础
  3. 企业运维实战--MFS分布式文件系统
  4. Exchange邮箱服务器后利用
  5. 装机出现“我们检测到您的硬盘是GPT格式但未找到ESP分区”解决方法
  6. latex强制图片标题居中
  7. 编译原理实验三 自下而上语法分析
  8. win10下装win7双系统_win10下怎么装win8系统 win10下装win8系统方法【详细教程】
  9. python合并word表格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...
  10. 126邮箱自动登录程序