P1025 數的劃分

題目描述

將整數nnn分成kkk份,且每份不能爲空,任意兩個方案不相同(不考慮順序)。

例如:n=7n=7n=7,k=3k=3k=3,下面三種分法被認爲是相同的。

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

問有多少種不同的分法。

輸入格式

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

輸出格式

111個整數,即不同的分法。

輸入輸出樣例

輸入 #1

7 3

輸出 #1

4

說明/提示

四種分法爲:
1,1,51,1,51,1,5;
1,2,41,2,41,2,4;
1,3,31,3,31,3,3;
2,2,32,2,32,2,3.

解題思路

dfs簡單思路

 第一次寫的時候給想複雜了  用了排序和set 雖然思路正確 但是效率低下

簡寫的時候會發現 只要保證升序就能達到去重的效果

 

#include <bits/stdc++.h>
using namespace std;
int n,k;
int ans = 0;
void dfs(int startd,int cur,int cnt){
	if(cnt == k){
		if(cur == n) ans++;
		return ;
	}
	for(int i = startd ; cur + i*(k-cnt) <= n ;++i){
			dfs(i,cur + i,cnt+1);
	}
}

int main(){
	
	
	scanf("%d%d",&n,&k);
	
	dfs(1,0,0);
	printf("%d",ans);
	return 0;
}

 

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 6418
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章