#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;
}
网友评论