递归与分治
文章平均质量分 72
庞老板
思考时啃啃手指头会更有灵感
展开
-
二分查找——UVa 10706 - Number Sequence
思路:要得到给定位置的数字,只需要知道该位置处在的序列Sk和距离Sk首位的偏移量即可。设seqLen[k]表示:S1S2…Sk的总长度,对于给定的i,用二分查找确定所在的Sk, i-Sk-1就是偏移量。/*Sk的长度:k的范围[1 , 9 ]: k[10 , 99 ]: 9 + (k-9)*2[100, 999]: 9 + 90*2 + (k-99)*3...原创 2013-06-19 20:39:14 · 2056 阅读 · 0 评论 -
第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)
当要查找的数x不在有序数组a中时,返回第一个大于x的数的位置或第一个小于x的数的位置 lowend,midend,highend表示查找结束时各游标的值,low,mid,high表示使查找结束的最后一次操作时,各游标的值。 查找结束的条件是lowend>highend,由于lowend的值由mid+1得到,highend的值由mid-1得到,所以,当lowend>highend原创 2013-05-26 11:54:13 · 1445 阅读 · 0 评论 -
Uva 10341 Solve It
#include #include #include using namespace std;int p, q, r, s, t, u;const double e = exp(1);double Calc(double x){ return p*pow(e, -x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;}int m原创 2013-06-10 18:05:24 · 830 阅读 · 0 评论 -
UVa 10700 Camel trading
思路:当先计算加法时,得到的是最大值,先计算乘法时,得到的是最小值。#include #include #include using namespace std;#define MAXN 100bool lowerPriority[45][45]; //lowerPriority[i][j]为真表示,运算符i的优先级低于运算符jbool MinPriorityOp(原创 2013-06-20 17:12:09 · 763 阅读 · 0 评论 -
二分查找 UVa 10487 - Closest Sums,时间复杂度为O(2nlogn)
思路:设给定的数为q,找出数组中的两个不相同的数(值可以相同)a、b,满足MIN{|q-(a+b)|},当q-a=b时,得到最小值为0。所以,可以先将数组排序,遍历a为数组中的数,二分查找数组中与q-a最为接近的数即为b。排序和遍历的时间复杂度为均为O(nlogn)。#include #include #include using namespace std;#原创 2013-06-20 13:31:14 · 983 阅读 · 0 评论 -
UVa 10905 - Children's Game(求多个正整数排列后,所得的新的数字的极值)
求多个正整数首尾相连排列后,所得的新的数字的极值。原创 2014-01-02 18:46:55 · 1842 阅读 · 0 评论