题目描述

今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙。最近,由于XX原因,大家不得不到岳麓山去提水。55555555~,好累啊。

信息组有一个容量为q升的大缸,由于大家都很自觉,不愿意浪费水,所以每次都会刚好把缸盛满。但是,信息组并没有桶子(或者瓢)来舀水,作为组内的生活委员,你必须肩负重任,到新一佳去买桶子。

新一佳有p种桶子,每种桶子都有无穷多个^_^,且价钱一样。由于大家都很节约,所以你必须尽量少买桶子。如果有多种方案,你必须选择“更小”的那种方案,即:把这两个方案的集合(不同大小的桶子组成)按升序排序,比较第一个桶,选择第一个桶容积较小的一个。如果第一个桶相同,比较第二个桶,也按上面的方法选择。否则继续这样的比较,直到相比较的两个桶不一致为止。例如,集合{3,5,7,三} 比集合 {3,6,7,8} 要好。

为了把缸装满水,大家可以先从岳麓山的井里把桶装满水提回来,然后倒进缸里。为了不十分麻烦或者浪费宝贵的水资源,大家决不把缸里的水倒出来或者把桶里的水倒掉,也不会把桶里的水再倒回井中,(这样会污染井水)。当然,一个桶可以使用多次。例如,用一个容积为 1 升的桶可以将任意容量的大缸装满水。而其它的组合就要麻烦些。

输入输出格式

输入格式:

第1行1个数q(q<=20000)。

第2行1个数p(p<=100)。

接下来p行,每行一个数,依次为每个桶的容积。

输出格式:

共1行,每两个数间用空格分隔,第1个数k为最少的桶的数量,接下来k个数从小到大输出每个桶的容量。

输入输出样例

输入样例#1:

16
3
3
5
7
输出样例#1:

2 3 5
迭代深搜
+dp检验(01背包)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 1010
using namespace std;
int block[maxn],ans[maxn],top,n,m;
bool b[],flag=;
bool dp(int x)
{
memset(b,,sizeof(b));
b[]=;
for(int i=;i<=x;i++)
for(int j=ans[i];j<=m;j++)
if(b[j-ans[i]]) b[j]=;
if(b[m]) return true;
}
void dfs(int c,int x)
{
if(flag==) return;
if(c==)
{
if(dp(top))
{
flag=;
printf("%d ",top);
for(int i=;i<=top;i++) printf("%d ",ans[i]);
}
}
else if(x<=n)
{
ans[++top]=block[x];
dfs(c-,x+);
ans[top--]=;
if(flag==)
dfs(c,x+);
}
}
int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=n;i++)
scanf("%d",block+i);
sort(block+,block++n);
for(int i=;i<=n&&flag==;i++)
dfs(i,);
return ;
}

luogu P1494 岳麓山上打水的更多相关文章

  1. luogu P1494 岳麓山上打水 [iddfs]

    题目描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信息组有一个容量为q升的大缸,由于 ...

  2. P1159岳麓山上打水

    P1159岳麓山上打水 https://vijos.org/p/1159 dfsID,第一次听说这东西,但是感觉不太靠谱啊. 一开始的时候,想到了排个序后,然后进行dp,如果要输出字典序最小其实还是可 ...

  3. vijosP1159 岳麓山上打水

    vijosP1159 岳麓山上打水 链接:https://vijos.org/p/1159 [思路] 迭代加深搜索+完全背包判断. 自己没有思路,看的别人代码. 总体上讲就是不断增大桶的数目并以之为上 ...

  4. 【DFS】【DP】岳麓山上打水

    [vijos1159]岳麓山上打水 描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信 ...

  5. [vijos1159]岳麓山上打水

    [vijos1159]岳麓山上打水 试题描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. ...

  6. [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>

    题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...

  7. [luoguP1494] 岳麓山上打水 && [luoguP2744] [USACO5.3]量取牛奶Milk Measuring

    传送门 传送门 dfs选取集合,dp背包判断 虽然我觉的会TLE.. 但是的确是AC了 #include <cstdio> #include <cstring> #includ ...

  8. 题解【Vijos1159】岳麓山上打水

    题面 迭代加深搜索模板题. 注意开始时要先对桶的容量从小到大排序. 达到搜索层数时使用完全背包\(\text{check}\)即可. 具体实现参考代码. #include <bits/stdc+ ...

  9. 【luogu P1494 [国家集训队]小Z的袜子】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1494 #include <cstdio> #include <algorithm> ...

随机推荐

  1. CentOS vim中backspace不能用,出现^?的解决方法

    查看在VI配置器下面使用backspace删除时提示输出那个字符例如:^H.^?.^a等字符如果输出的是:^? 字符 则使用以下命令:[oracle@junyii~]$ stty erase ^? 再 ...

  2. [Ceres]C++优化库

    官网教程: http://ceres-solver.org/nnls_tutorial.html 定义了一个最小二乘法求解器 自动求导的功能

  3. 浅谈传输层协议TCP和UDP

    在当今因特网的层次结构中,传输层的协议主要有两种,其一为Transmission Control Protocol,即TCP:其二为User Datagram Protocol,即UDP. 1.TCP ...

  4. 一个画ROC曲线的封装包

    Draw_ROC_Curves This is a python file which is used for drawing ROC curves -f : assign file name -t ...

  5. Gluon

    推荐一门mxnet的学习框架gluon 首先是学习网址链接gluon 基本环节分成两部分 从0开始(介绍不使用框架,而只使用mxnet来完成神经网络的搭建) gluon实现(介绍使用框架快速搭建神经网 ...

  6. 威士忌(whiskey)

    威士忌(whiskey) 题目描述 Alan 喝了假威士忌,想问你一个问题: nvliu66 推荐大家读三本书<百年孤独>.<城市发展史>.<美国大城市的生与死>, ...

  7. ACdream 1029 前缀和

    Multiplication Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Subm ...

  8. python类中两个列表实例如何相加或相减

    如下 import numpy a = [1, 2, 3, 4] b = [5, 6, 7, 8] a_array = numpy.array(a) b_array = numpy.array(b) ...

  9. Gradle for Android(二)全局设置、自定义BuildConfig

    全局设置 如果有很多项目,可以设置全局来统一管理版本号或依赖库,根目录下build.gradle下: ext { compileSdkVersion = 23 buildToolsVersion = ...

  10. js j将数字每三位用逗号隔开的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...