p2320&bzoj1192 鬼谷子的钱袋】的更多相关文章

传送门(洛谷) 传送门(bzoj) 题目 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一件宝物引起了他极大的兴趣,那就是无字天书.但是,他的行程安排得很满,他他已经买好了去邯郸的长途马车标,不巧的是出发时间是在拍卖会快要结束的时候.于是,他决定事先做好准备,将自己的金币数好并用一个个的小钱袋装好,以便在他现有金币的支付能力下,任何数目的金币他都能用这些封闭好的小钱的组…
洛谷2320 06湖南 鬼谷子的钱袋 来源 题目描述 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一件宝物引起了他极大的兴趣,那就是无字天书.但是,他的行程安 排得很满,他他已经买好了去邯郸的长途马车标,不巧的是出发时间是在拍卖会快要结束的时候.于是,他决定事先做好准备,将自己的金币数好并用一个个的小钱袋装好,以便在他现有金币的支付能力下,任何数目的金币他都能用这些封…
1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2473 Solved: 1806 [Submit][Status][Discuss] Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一件宝物引起了他极大的兴趣,那就是无字天书.但是,他的行程安排得很满,他…
没想到这是一道省选题... /* BZOJ1192 */ #include <cstdio> int main() { ; scanf("%d",&m); ;m/=,num++); printf("%d\n",num); ; }…
这道题很神奇 我们举一个例子,m=12 那么我们可以把它分成两部分,L和R: (1,2,,6)(7,8,,12) 我们可以发现R中的数都可以由12/2和左边的数组合得到 那么我们对L再分------ 同理,奇数时将,m/2变为m/2+1即可 #include<cstdio> #include<cstring> using namespace std; ,f[]; int main(){ scanf("%d",&m); while (m){ f[++cnt…
https://www.luogu.org/problem/show?pid=2320#sub 题目描述全是图 数学思维,分治思想 假设总数为n 从n/2+1到n的数都可以用1~n的数+n/2表示出来 1~n/2的数也可以这样拆分成两份. 一路拆下去即可. 例如n=12时: {1 2 3 4 5 6}+6={7,8,9,10,11,12} {1,2,3}+3={4,5,6} {1,2}+3={4,5} {1}+2={3} 所以只需要1 2 3 6 /*by SilverN*/ #include<…
题目链接 题意概述:把正整数n分为m个正整数,m个正整数中不允许出现复数个非1的正整数,保证所有小于n的正整数都可以用一部分正整数的和表示,并且使m尽量小. 这道题不知道为啥bzoj上没有要求输出方案,导致我把bzoj的程序粘到洛谷上瞬间全wa. 思想还是非常简单的,第一个钱袋装n/2个金币,第二个装n/2/2个金币,第三个…… 这样可以用和的形式表示任意小于n的正整数. 显然这样是最优解,而且基于不断除2得出的答案个数为log2n. #include<cstring> #include<…
就是n可以被1到n/2的所有数表示出来: 我一开始写了个把二进制数里的1拿出来,但是WA了两个点: 分治? 好多人说数据有问题,我也不知道,也不想知道: %:include<cstdio> %:include<cstring> %:include<algorithm> using namespace std; ; int m; int sum; int a<:maxn:>; int main() <% scanf("%d",&…
题目传送门 解题思路: 对于每一个数i,我们都可以用i/2来表示,而对于i/2我们可以用i/4表示......(以此类推) 举个例子,对于10,我们可以用5 + 5来表示,而5可以用 3 + 2表示,2 可以用1 + 1表示,所以对于10,我们只需要5,3,2,1即可. AC代码: #include<cstdio> #include<iostream> using namespace std; ],k; int main() { scanf("%d",&…
P2320 [HNOI2006]鬼谷子的钱袋 挺有趣的一道题,之所以发这篇题解是因为感觉思路的更清晰一点qwq 此题主要有两种方法: 一.分治思想 例如要凑出1~20,假如我们已经能凑出1~10了,那么只要再有一个10元的钱袋,便可以凑出11~20 同理,再要凑出1~10,则需要凑出1~5+一个5元的钱袋 就这样不断分治,那么每次n/2都是一定会选的数 如果n是奇数,如21,那么只要凑出1~10加上一个11元的钱袋即可 #include<iostream> using namespace st…