题意:

给出\(n\)个长度,要设计一个有\(m\)个刻度的刻度尺,刻度尺的刻度从\(0\)开始.

使得任意一个长度都能被该刻度尺度量出来.

首先要使\(m\)最小,在\(m\)最小的前提下尺子的长度越短越好.

分析:

首先对长度从小到大排个序,然后从小到大枚举刻度尺上可能的长度,然后用bitset标记一下能被度量的长度有哪些.

注意有可能存在相同的长度.

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <bitset>
#include <iostream>
using namespace std; const int maxn = 50 + 10;
const int INF = 0x3f3f3f3f; int n, a[maxn];
int choose[maxn], scale[maxn];
int ans, maxl; void dfs(int d, bitset<maxn> mask) {
if(d > ans) return ;
int cnt = mask.count();
if(cnt == n) {
if(d < ans || (d == ans && choose[d-1] < maxl)) {
ans = d;
maxl = choose[d - 1];
for(int i = 0; i < d; i++) scale[i] = choose[i];
}
return ;
}
if(d == 7) return ;
for(int i = 0; i < n; i++) if(mask[i] == 0) {
for(int j = 0; j < d; j++) {
if(choose[j] + a[i] > choose[d - 1]) {
choose[d] = choose[j] + a[i];
bitset<maxn> _mask = mask;
for(int k = 0; k < d; k++) {
int t = choose[d] - choose[k];
for(int l = 0; l < n; l++)
if(a[l] == t) _mask[l] = 1;
}
dfs(d + 1, _mask);
}
}
}
} int main()
{
choose[0] = 0; int kase = 0;
while(scanf("%d", &n) == 1 && n) {
for(int i = 0; i < n; i++) scanf("%d", a + i);
sort(a, a + n);
choose[1] = a[0];
bitset<maxn> mask;
mask.reset();
for(int i = 0; i < n; i++) if(a[i] == a[0]) mask[i] = 1;
ans = INF;
dfs(2, mask); printf("Case %d:\n", ++kase);
printf("%d\n", ans);
printf("%d", scale[0]);
for(int i = 1; i < ans; i++) printf(" %d", scale[i]);
printf("\n");
} return 0;
}

LA 3667 Ruler 搜索的更多相关文章

  1. [dfs] UVALive 3667 Ruler

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=1668">https://ic ...

  2. linux --> vimrc的配置

    vimrc的配置 .vimrc文件: " 去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nocompatible "代码补全 set completeopt ...

  3. 2018.2.3 Centos 的vim好看的主题配置及JDK的安装配置

    这里用的是Centos7云服务器的系统 第一步登录 centos7 系统: 通过查看命令 rpm -qa | grep vi 第二步:检测是否已经安装过Vim: 输入命令:rpm -qa|grep v ...

  4. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  5. LA 6042 Bee Tower 记忆化搜索

    一开始读漏了很多细节,用递推写死活跑不出样例. 把题目中的细节列一下吧,状态方程很好推,改成记忆化搜索之后代码也很清晰. 1.蜜蜂需要到最高的塔去,最高的塔可能不止一个,抵达任意一个即可. 2.蜜蜂每 ...

  6. LA 3516 Exploring Pyramids (记忆化搜索)

    题意 给定一个DFS序列,问能有多少树与之对应. 思路 设输入序列为S,dp(i, j)为子序列Si, Si+1, --, Sj对应的树的个数,则边界条件为d(i, i) = 1,且Si != Sj时 ...

  7. win下gvim或者linux下的vim安装vundle都适用的配置文件 - 在当前目录及其子目录下**, 的所有文件* 中, 搜索当前光标所在的单词

    gvim下的普通配置: if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" set fileencodings=utf-8,g ...

  8. [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能

      感谢eoe社区的分享   最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...

  9. 三、jQuery--jQuery实践--搜索框制作

    input标签讲解 <input/>作为按钮的type属性:button.submit(后面会有二者对比分析)

随机推荐

  1. Redis的数据类型(lists、Sets)

    lists类型 Redis 列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素到头部, 而 RPUSH 插入一个新元素导 ...

  2. 定时器 & 日期时间对象 & 正则

    1 JavaScript 计时事件 通过使用 JavaScript,有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行,这称之为计时事件. 两个关键方法是: setInterv ...

  3. SpringMVC+Thymeleaf 简单使用

    一.简介 1.Thymeleaf 在有网络和无网络的环境下皆可运行,而且完全不需启动WEB应用,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果.浏览器解释 h ...

  4. 关于纠正《Hive权威指南》中的结论~“hive在使用set自定义变量时,hivevar命名空间是可选的”~的论证

    背景: 根据<Hive权威指南>上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义的变量以便在Hive脚本中引用.当用户使用这个功能时,Hive ...

  5. java uuid第一次性能

    在java中产生uuid的方式是使用java.util.UUID. UUID.randomUUID().toString(); 我在测试redis性能时,使用uuid产生测试数据,发现多线程测试red ...

  6. js修改文档的样式

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Java ...

  7. 洛谷 P1588 丢失的牛

    题目描述 FJ丢失了他的一头牛,他决定追回他的牛.已知FJ和牛在一条直线上,初始位置分别为x和y,假定牛在原地不动.FJ的行走方式很特别:他每一次可以前进一步.后退一步或者直接走到2*x的位置.计算他 ...

  8. 为什么我的C4C Service Request没办法Release到ERP?

    问题 UI上发现找不到Release to ERP的按钮: 但是在UI Designer里是能看到这个按钮的.检查其Visible的属性,绑到了一个Calculated Rule上面: 发现其显示在r ...

  9. no pointer in java

    Why there are no pointers in Java? In Java there are references instead of pointers. These reference ...

  10. 安装 Win7 的系统的时候如何分区

    解决方案 在安装Win7的系统的时候,可以使用下面方法进行分区: 1. 在出现同意许可条款,勾选“我接受许可条款(A)”后,点击下一步,然后继续下面操作: 2. 进入分区界面,点击“驱动器选项(高级) ...