洛谷 P1025 数的划分
题目描述
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入输出格式
输入格式:
n,k (6<n<=200,2<=k<=6)
输出格式:
一个整数,即不同的分法。
输入输出样例
说明
四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;
思路:数据范围很小,搜索可以过。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,k,ans; void dfs(int last,int sum,int cur){ if(cur==k){ if(sum==n) ans++; return; } for(int i=last;sum+i*(k-cur)<=n;i++) dfs(i,sum+i,cur+1); } int main(){ scanf("%d%d",&n,&k); dfs(1,0,0); cout<<ans; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。