概述
题意:给定正整数n,你的任务是用最少的操作次数把序列1,2,...,n中所有数都变成0。
每次操作可以从序列中选择一个或者多个整数,同时减去一个相同整数,求最小的操作次数。
题解:
我们可以先列举几个数
数 次数
1 1
2 2
3 2
4 3
5 3
6 3
7 3
8 4
发现了一定的规律,通过题意我们发现每次操作可以从序列中选择一个或者多个整数,不需要连续,这一条性质是非常有用的。
1 2 3 4 5 6 这一序列,我们可以将 4 5 6 同时减去 3 ->这样就变成了 1 2 3 可以将其与1 2 3重叠,及选择时与 1 2 3一样即可,这样f[6]=f[3]+1->f[n]=f[n/2]+1;
1 #include<algorithm> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<string> 6 #include<cstdio> 7 8 using namespace std; 9 10 int n; 11 12 int main() 13 { 14 while (~scanf("%d",&n)) 15 { 16 int ans=0; 17 while (n>0) 18 { 19 ans++; 20 n/=2; 21 } 22 printf("%dn",ans); 23 } 24 }
转载于:https://www.cnblogs.com/fengzhiyuan/p/6985256.html
最后
以上就是潇洒星星为你收集整理的Uva 11384 Help is needed for Dexter的全部内容,希望文章能够帮你解决Uva 11384 Help is needed for Dexter所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复