1,求取组合数的方法
//递归求组合数
int combine(int n,int r)
{
int i;
if(n<r) //输入数据有误
return 0;
else if(r<1) //组合数已经完全确定
max();
else //继续填充组合数
{
for(i=n;i>=r;i--)
{
a[r]=i;
combine(i-1,r-1);
}
}
return 0;
}
2,递归二分查找
int search(int a[],int low,int high,int e)
{
int mid;
while(low<=high) //迭代二分查找
{
mid=(low+high)/2;
if(e==a[mid]) //中间为待查找数
return mid;
else if(e<a[mid]) //在左边找
high=mid-1;
else //在右边找
low=mid+1;
}
return -1;
}
3,动态规划求背包
int knap(int m,int n) //动态规划逆向递推
{
int i,j;
for(j=0;j<=m;j++)
f[n][j]=0;
for(j=w[n];j<=m;j++) //初始化放最后一个背包的情况