递归
斐波那契
全排列
#include <bits/stdc++.h>
using namespace std;
int listt[]={1,2,3,4,5,6};
void perm(int list[],int k,int m)
{
if(k==m)
{
for(int i=0;i<=m;i++)
cout<<list[i]<<" ";
cout<<endl;
}else
{
for(int j=k;j<=m;j++)
{
swap(list[k],list[j]);
perm(list,k+1,m);
swap(list[k],list[j]);
}
}
}
int main()
{
perm(listt, 0, 3);
return 0;
}
整数划分
#include <bits/stdc++.h>
using namespace std;
int f(int n,int m)
{
if(n==1||m==1) return 1;
else if(n<m) return split(n,n);
else if(n==m) return split(n,n-1)+1;
else return split(n,m-1)+split(n-m,m);
}
int main()
{
return 0;
}
分治策略
选择问题
#include <bits/stdc++.h>
using namespace std;
int select(int l,int r,int k)
{
if(l>=r) retun a[l];
int i=l;
int j=r+1;
int p=a[l];
while(true)
{
do{
i++;
}while(a[i]<p);
do{
j--;
}while(a[j]>p);
if(i>=j) break;
swap(a[i],a[j]);
}
if(j-l+1==k) return p;
a[l]=a[j];
a[j]=p;
if(j-l+1<k)return select(j+1,r,k-j+l-1);
else return select(l,j-1,k);
}
int main()
{
return 0;
}
输油管道问题
分治计算中位数
#include <bits/stdc++.h>
using namespace std;
int a[100];
int select(int l,int r,int k)
{
if(l>=r) return a[l];
int i=l;
int j=r+1;
int p=a[l];
while(true)
{
do{
i++;
}while(a[i]<p);
do{
j--;
}while(a[j]>p);
if(i>=j) break;
swap(a[i],a[j]);
}
if(j-l+1==k) return p;
a[l]=a[j];
a[j]=p;
if(j-l+1<k)return select(j+1,r,k-j+l-1);
else return select(l,j-1,k);
}
int main()
{
int n;
int x;
cin>>n;
for(int i=0;i<n;i++)
cin>>x>>a[i];
int minn =0;
int y=select(0,n-1,n/2);
cout<<y<<"y"<<endl;
for(int i=0;i<n;i++)
minn+=(int)fabs(a[i]-y);
cout<<minn<<endl;
return 0;
}
半数集问题
半数集问题
#include <bits/stdc++.h>
using namespace std;
int comp(int n)
{
int ans=1;
if(n>1) for(int i=1;i<=n/2;i++)
ans+=comp(i);
return ans;
}
int comp(int n)
{
int ans=1;
if(a[n]>0) return a[n];
if(n>1)for(int i=1;i<=n/2;i++)
ans+=comp(i);
a[n]=ans;
return ans;
}
int main()
{
return 0;
}
整数因子分解
#include <bits/stdc++.h>
using namespace std;
int total;
void solve(int n)
{
if(n==1) total++;
else for(int i=2;i<=n;i++)
if(n%i==0) solve(n/i);
}
int main()
{
int n;
cin>>n;
solve(n);
cout<<total<<endl;
return 0;
}
取余运算
#include <bits/stdc++.h>
using namespace std;
int mod(int a,int b,int c)
{
if(p==1) return a%c;
else if(p%2) return mod(a%k,p-1,k)*a%k;
}
int main()
{
return 0;
}