UVa11384】的更多相关文章

题意:给定正整数n,求把1,2,--,n中所有书都变成0的最少操作次数,每次操作可从序列中选择一个或多个整数,同时减去一个相同的正整数. 分析:如1,2,3,4,5,6, 第一步将4,5,6同时减4,则变成了1,2,3,0,1,2 情况与1,2,3相同,由此可知f(n) = f(n / 2) + 1 #include<cstdio> #include<iostream> #include<cstring> #include<string> #include&…
Dexter is tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game he planned for her is quite easy to play but not easy to win at least not for Dee Dee. But Dexter does not have time to spend on this silly task, so he wants your help…
题意:      给定一个正整数n,你的任务是最少的操作次数把序列1 2 3 4 5...n中所有的数字都变成0,每次操作可以从序列中选择一个活多个整数,同时减去一个相同的正整数,比如 1 2 3可以吧2和3同时减少2,得到1 0 1 思路:      我们只考虑操作一次的时候,操作一次是不是最大的效果就是剪掉一半, 比如1 2 3 4 5 6 7 变成1 2 3 0 1 2 3 等价于1 2 3直接减少一半,那么在吧减少后等等价状态1 2 3在作同样的操作直到只剩一个的时候就ok了. #inc…
题目链接:https://vjudge.net/problem/UVA-11384 题意:给定正整数 n,用最少的操作把序列 1,2,,,n 全部变成 0: 操作是:每次可以从序列中选择一个或者多个,同时减去一个相同的数. 其实是一个递归分治的思想,把一部分数字选出来,同时一减,结果就变成了前面没有减过的了,数量不影响结果,反正可以一次拿出很多来操作. 那么怎么选择,使得 n 到 x 的时候 x 最小呢? 经过尝试,发现,减后面一半是最好的,f(n) = f(n/2) + 1; f(1) = 1…
题目链接:https://vjudge.net/problem/UVA-11384 这道题要分析得透: 如果我们手模的话,会发现:如果先将大于$\frac{n}{2}$的数都减去$\frac{n}{2}$是最优的, 这时候从$\frac{n}{2} +1$到$n$我们是不用考虑的,因为它们小于从$1$到$\frac{n}{2}$. 因此转移方程便是: $f[1]=1$ $f[i]=f[i/2]+1$ AC代码: #include<cstdio> #include<iostream>…