全排列模版easy
  • 板块学术版
  • 楼主Red_Coast
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/16 14:16
  • 上次更新2023/12/16 14:39:36
查看原帖
全排列模版easy
810419
Red_Coast楼主2023/12/16 14:16

p1025改的

将整数 nn 分成 kk 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的。

1,1,51,1,5;
1,5,11,5,1;
5,1,15,1,1.

问有多少种不同的分法。

输入格式

n,kn,k (6<n≤2006<n \le 200,2≤k≤62 \le k \le 6)

输出格式

所有全排列

11 个整数,即不同的分法。

样例 #1

样例输入 #1

7 3

样例输出 #1

1,1,5 
1,2,4
1,3,3 
2,2,3
4

代码(C++)

#include<bits/stdc++.h>
using namespace std;
int n,k,cnt,li[100][100],dfsli[100];

void dfs(int last,int sum,int cur)
{;
    if(cur==k)
    {
        if(sum==n){
        	for(int x=0;x<k;x++){
        		li[cnt][x]=dfsli[x];
			}
		 cnt++;}
        
        return;
    }
    for(int i=last;sum+i*(k-cur)<=n;i++)
    {
    dfsli[cur]=i;
        dfs(i,sum+i,cur+1);
    }
}

int main()
{
    cin>>n>>k;
    dfs(1,0,0);
    for(int i=0;i<cnt;i++){
    	for(int j=0;j<k;j++){
    		if(li[i])
    		cout<<li[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<cnt;
}
2023/12/16 14:16
加载中...