P1490 买蛋糕

题目描述

野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕。大家不知道最后要买的蛋糕的准确价格,而只会给蛋糕估价,即要买一个不超过多少钱的蛋糕。众OIer借此发挥:能否用最少的钱币数去凑成估价范围内的所有价值,使得不管蛋糕价值多少,都不用找钱……

现在问题由此引出:对于一个给定的n,能否用最少的不等的正整数去组成n以内(包括n)的所有的正整数呢?如果能,最少需要多少个正整数,用最少个数又有多少不同的组成方法呢?

输入输出格式

输入格式:

只有一行包含一个整数n(1<=n<=1000)。

输出格式:

一行两个数,第一个数是最少需要多少个数,第二个数是用最少个数的组成方案个数。两个答案用空格分隔。


  • 首先明确第一个问题:这个最小的正整数是多少?

也许你可以打表看出来,也许不能,但别急,我们有看似靠谱一点的思维方法

看看样例:6

可行方案:

①\(1\) \(2\) \(3\);

②\(1\) \(2\) \(4\).

我们发现,对于方案①,组成3的时候有两种方法(1+2或3),而方案②只有一种。换而言之,3的利用是有浪费的。而不浪费的方案②还可以组成7。

那么,我们咋让她(每个数)都用好自己呢

很简单,百合就行了

联想一下二进制位下的数

\(1\),\(10\),\(11\),\(100\),\(101\),\(110\),\(111\),\(1000\)...

可不是嘛,这个\(2^i\)的每个数利用率可高了

由此可知,二进制的位数即为这个最小的正整数


  • 想明白第一问以后,应该给出了一个相对的第二问的思维导向。(当然不绝对哈)

当每个数的利用率最大的时候,她们能够凑成的最大整数即为她们的和,这点是毋庸置疑的。

那么,在利用率相对不是那么大的时候呢?

我们注意到,此时已经有了一个限制条件:已有的最小正整数

手动模拟一下,确实是仍然成立的。(其实是不太会证啦)

这时候,我们就把参与量已使用的各数之和凑成的最大整数搞到一起去了

考虑\(dp[k]\)代表凑成时\(k\)的方案数。看看这时候还要压哪些信息进去。

显然,剩下的必要信息还有第\(i\)个数和第\(i\)个数的值\(j\)

\(dp[i][j][k]\)表示已选\(i\)个数,第\(i\)个数为\(j\),前\(i\)个数和为\(k\)(凑成的最大整数位\(k\))的时候的方案数

转移方程 \(dp[i+1][l][k+l]+=dp[i][j][k];\)

其中\(l\)为枚举的下一个填充数

核心代码:

    dp[1][1][1]=1;
    for(int i=1;i<ans;i++)
        for(int j=i;j<=(1<<(i-1));j++)
            for(int k=i*(i-1)/2;k<(1<<i);k++)
                for(int l=j+1;l<=k+1;l++)
                    if(l+k<=n)
                        dp[i+1][l][k+l]+=dp[i][j][k];
                    else
                        dp[i+1][l][n]+=dp[i][j][k];

注意\(j,k,l\)的上下界,都是被已经得到的第一问给约束住了

当然,也没必要跑这么死,比如\(k\)从\(i\)开始反而会快一些。

至于\(if\)和\(else\)的判断,是为了方便求最后结果的一点点小贪心了。


2018.5.2

洛谷 P1490 解题报告的更多相关文章

  1. 洛谷 P1462 解题报告

    P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...

  2. 洛谷 P1879 解题报告

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...

  3. 洛谷 P1069 解题报告

    P1069 细胞分裂 题目描述 \(Hanks\)博士是\(BT\) (\(Bio-Tech\),生物技术) 领域的知名专家.现在,他正在为一个细胞实验做准备工作:培养细胞样本. \(Hanks\) ...

  4. 洛谷 P2491 解题报告

    P2491 消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个 ...

  5. 洛谷 P2587 解题报告

    P2587 [ZJOI2008]泡泡堂 题目描述 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏 ...

  6. 洛谷 P1054 解题报告

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  7. 洛谷 P1053 解题报告

    P1053 篝火晚会 题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了"小教官".在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有 ...

  8. 洛谷 P1057 解题报告

    P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹 ...

  9. 洛谷 P1430 解题报告

    P1430 序列取数 题目描述 给定一个长为\(n\)的整数序列\((n<=1000)\),由\(A\)和\(B\)轮流取数(\(A\)先取).每个人可从序列的左端或右端取若干个数(至少一个), ...

随机推荐

  1. java对象大小

    Java对象的内存布局:对象头(Header),实例数据(Instance Data)和对齐填充(Padding) 对象头在32位系统上占用8B,64位系统上占16B. 无论是32位系统还是64位系统 ...

  2. C++中将构造函数或析构函数定义为private

    今天面试被问到了这个单例模式常用到的技术手段,下面进行分析: 很多情况下要求当前的程序中只有一个object.例如一个程序只有一个和数据库的连接,只有一个鼠标的object.通常我们都将构造函数的声明 ...

  3. 《Ext JS 4.2 实战》可以买了

    今天编辑告诉我,在网上可以买到这书了,购买链接是http://www.amazon.cn/Ext-JS-4-2%E5%AE%9E%E6%88%98-%E9%BB%84%E7%81%AF%E6%A1%A ...

  4. Saiku去掉登录模块

    1.修改applicationContext-saiku-webapp.xml <security:intercept-url pattern="/rest/**" acce ...

  5. Android百分比布局支持库(android-percent-support)

    Android中提供了五种布局,其中用的最多的就是:LinearLayout, RelativeLayout 和 FrameLayout这三种布局,在对某一界面进行布局时最先想到也是通过这三种来布局的 ...

  6. SVN版本控制器中各符号的含义

    SVN符号的含义 项目开发过程中,随着学习的不断深入,开始慢慢接触到版本管理控制工具,其实这个工具主要用于团队开发之中,但对于个人项目的备份也有好处,可以避免在电脑出现不可预知的故障时,最大化的保护自 ...

  7. Unity与web交互

    Unity在发布web时,重要的是Unity与Web的交互,参数的传递 1.unity调用网页js的函数:Application.ExternalCall js函数: <script langu ...

  8. 网站系统压力测试Jmeter+Badboy

    最近项目需要压力测试,因此搜了几款试用,首选的是LoadRunner这款大名鼎鼎的测试软件: LoadRunner11 下载请猛戳这里 传送门LoadRunner破解文件 下载请猛戳这里 传送门Loa ...

  9. 如何将windows格式的图标作为os x应用程序的图标

    刚由windows转为os x的同学可能知道,在os x下我们想改变一个app的图标异常简单,直接打开该app的简介,然后将图标文件拖入简介窗口左上角图标方框即可.但是很多童鞋下载了一些图标文件后发现 ...

  10. python 网络框架twisted基础学习及详细讲解

    twisted网络框架的三个基础模块:Protocol, ProtocolFactory, Transport.这三个模块是构成twisted服务器端与客户端程序的基本.Protocol:Protoc ...