博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 11384 正整数序列
阅读量:5935 次
发布时间:2019-06-19

本文共 554 字,大约阅读时间需要 1 分钟。

题目链接:

题意:给定正整数 n,用最少的操作把序列 1,2,,,n 全部变成 0;

操作是:每次可以从序列中选择一个或者多个,同时减去一个相同的数。

 

其实是一个递归分治的思想,把一部分数字选出来,同时一减,结果就变成了前面没有减过的了,数量不影响结果,反正可以一次拿出很多来操作。

那么怎么选择,使得 n 到 x 的时候 x 最小呢?

经过尝试,发现,减后面一半是最好的,f(n) = f(n/2) + 1;

f(1) = 1;

1 #include 
2 3 using namespace std; 4 5 int dp(int n) { 6 if(n==1) 7 return 1; 8 else return dp(n/2) + 1; 9 }10 11 int main()12 {13 int n;14 while(scanf("%d",&n)!=EOF) {15 printf("%d\n",dp(n));16 }17 return 0;18 }
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/6701560.html

你可能感兴趣的文章
认识、学习bash,环境变量问题
查看>>
MySQL_qps
查看>>
CentOS 6 下单独记录 iptables 日志
查看>>
windows7 centos6.3 双系统安装
查看>>
Kali 防火墙配置
查看>>
如何将excel导入SharePoint
查看>>
BGP联邦实验
查看>>
unicode vs uft8
查看>>
百度搜索技巧
查看>>
linux ssh无密码登录
查看>>
partprobe命令使用方法
查看>>
Curl测试网页响应时间(转载)
查看>>
python操作excel例子
查看>>
我的友情链接
查看>>
收集线上日志工具bug
查看>>
如何使用两台无线路由器进行无线桥接(互联)(转)
查看>>
NO space left on device错误与解决办法
查看>>
今夜你会不会上线
查看>>
php优化
查看>>
win7mmc远程桌面
查看>>