美文网首页
非正常递归(m选n)

非正常递归(m选n)

作者: Vincy_ivy | 来源:发表于2019-05-04 23:26 被阅读0次
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;
int a[1000001],n,k,flag[1000001],K,Sum;
//K是要选取的个数,num一开始是0,
int dfs(int k,int i,int sum)            //k代表第几层循环的意思,因为用暴力遍历不知道要写几层循环,所以用递归做,一般这么多层可能会超时,不过这题过了
//i是主要的,n-k是用来记录那个数能够选取的范围,比如说它是倒数第三个,他那的位置应该局限在上一个数的位置到倒数第三个数的位置
{
    int j;
    if(k==0){
        Sum+=sum;
    }
    else{
//j=i,j等于上一层的下一个数
        for(j=i;j<=n-k;j++)
            dfs(k-1,j+1,sum+a[j]);
    }
    return Sum;
}
int main()
{
    int k,sum=0;

    cin>>n>>k;
    for(int i=0;i<n;i++)
        {
            cin>>a[i];
            sum+=a[i];
        }
    if(k==0)
        cout<<"1"<<endl;
    else if(k==1)
        cout<<sum+1<<endl;
    else
        {
            int sum=0;
            for(int i=1;i<=k;i++)
            {
                Sum=0;
                sum+=dfs(i,0,0);
            }
            cout<<sum;
        }

    return 0;
}

相关文章

  • 非正常递归(m选n)

  • 欧几里得算法

    非递归算法 默认输入 m>=n 递归算法

  • 子集、组合、排列算法

    列出所有 1...n 的子集 输出 从 1...n 选 m 个数,列出所有组合 输出 从 1...n 选 m 个数...

  • m选n组合

    最近需求,要写排列组合算法,首先第一步是m个元素中选n个元素进行组合,也就是数学中C(m,n);方法有多种。 递归...

  • 组合

    上述代码中列出了 全组合的非递归、递归解法 从n个数中取m个的各种组合形式输出

  • 排列

    上述代码中列出了 全排列的非递归、递归解法 从n个数中取m个的各种排列形式输出

  • 矩阵链乘法

    递归算法: 迭代算法: 分析 递归算法:规模为n的问题,有n个递归,每个递归又有相应矩阵个数个递归,故T(n)=T...

  • 算法二

    递归表达式 n! = n*(n-1)! (0!=1) 递归经常需要初始条件以及递归表达式。 从低端构造递归,...

  • JS代码题1

    接收两个参数m和n。返回一个数组,该数组长度为m,值为n。(不能使用循环) 1. 递归法 使用数组方法 unshi...

  • grep 查找文件中满足条件的行

    grep [参数] 查找内容 查找文件 -v 反选 -n 显示行号 -r 递归查找文件 grep --color ...

网友评论

      本文标题:非正常递归(m选n)

      本文链接:https://www.haomeiwen.com/subject/pnvlnqtx.html