摘要:
试题连接:http://poj.org/problem?id=1458本题的状态:maxlen(i,j)表示:s1前i个字符形成的子串,与s2前j个字符形成的子串的最长公共子序列的长度(i,j从0开始)if(s1[i-1]==s2[j-1]) maxlen(i,... 阅读全文
摘要:
输入数据输入的第一行是序列的长度N (1using namespace std;int a[1001];int dp[1001]={0};int main(){ int n; cin>>n; for(int i=0; i>a[i]; dp[0... 阅读全文
摘要:
试题链接:http://poj.org/problem?id=11631.记忆递归型(自顶向下)D[i][j]来存数字典型的递归问题:D(r,j)出发,下一步只能走D(r+1,j)或者D(r+1,j+1).故对于N行的三角形:if(r==N) MaxSum(r,j)=... 阅读全文
摘要:
int Pow(int a,int b){//快速求a^b,复杂度log(b) if(b==0) return 1; if(b&1) //b是奇数 return a*Pow(a,b-1); else { ... 阅读全文
摘要:
一个排列含有逆序的个数称为这个排列的逆序数。例如排列263451含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8。例题: 求排列的逆序数笨办法: O(n2)分治O( nlogn) :1... 阅读全文
摘要:
void Swap(int &a,int &b) //位运算交换两数{ if(a!=b) { a^=b; //a=(a^b) b^=a; //b=b^a=b^(a^b)=0^a=a a^=b; //a=a^b... 阅读全文
摘要:
分治的基本概念把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。 分治的典型应用: 归并排序数组排序任务可以如下完成:1) 把前一半排序2) 把后... 阅读全文
摘要:
二分法求方程的根求下面方程的一个根: f(x) = x3-5x2+10x-80 = 0若求出的根是a,则要求|f(a)| 0,所以区间[0,100]内必然有且只有一个根。由于f(x)在[0,100]内是单调的,所以可以用二分的办法在区间[0,100]中寻找根。 #i... 阅读全文
摘要:
二分查找:BinarySearch(int a[],int n,int p); //有序数组,二分查找pLowerBound(int a[],int n,int p); //升序数组,找比p小的最大数 注意: int mid=(L+R)/2;为了防 (L+... 阅读全文
摘要:
例题: 放苹果把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 5,1,1和1,5,1是同一种分法。输入第一行是测试数据的数目t( 0 =k 时,总放法= 有盘子为空的放法(即盘子减少1个)+没盘子为空的放法(先每个盘子都放一个,再... 阅读全文