#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <unordered_map>
using namespace std;
/*解题思路:
* 共有8次还款,分配到5个月当中.
* 套用隔板法的思路:在8次还款的中间共有7次间隙,选择其中的五次,
* 则共有C(7)(5)=21次的还款方法. 每种还款方法中有一个月的还款额度最大,
* 最大额度值有21 个,最终输出这21个值中最小的一个
* http://blog.csdn.net/leeds1993/article/details/71214603*/
int ct=0;
int f(int* r,int* p,int n,int m){
if(m==1){
for(;r!=p;++r){
printf("%d",*r);
}
printf("%d\n",n);
ct++;
}
else{
for(*p=1;*p<n;++*p){
f(r,p+1,n-*p,m-1);
}
}
}
int main(){
int n,m;
cin>>n>>m;
int nums[n];
for(int i=0;i<n;i++){
cin>>nums[i];
}
int min_max=0;
f(nums,nums,n,m);
cout<<ct<<endl;
return 0;
}
不对,不知道为什么。