Standard IO-----数的划分问题(三)(CCF 1187)

数的划分问题三

题目描述
把正整数N分解成M个正整数的和,M个加数相同但顺序不同认为是相同的方案,要求总方案数。如3=1+2跟3=2+1是两个相同的方案。

输入
第一行输入两个整数N,M(1<=M<=N<=50)。

输出

输出一个整数表示方案数。

样例输入

5 3

样例输出

2

数据范围限制

1<=M<=N<=50

做题地址:CCF中学生程序设计在线评测系统-1187. 数的划分问题三(需要注册)


跟它的前身(参见数的划分问题(二),数的划分问题(一))相同,这仍是一道DP题目,只可惜,它跟它的前身比起来,实在是太了。

O(∩_∩)O 又有水题诶!

为了凑字数(对就是凑字数(我现在还在凑字数(坚持凑字数(这一排怎还没完))))
PS:上一排请忽略

先来分析一下不同(跟 数的划分问题(一) 比):

不同点1:M个加数相同但顺序不同认为是相同的方案
不同点2:诶,好像没了


水题代码在此(其实你不需要)

#include
#include
#include
using namespace std;
int n,m,tot;
int f(int t,int sum,int k)
{
    int s=0;
    if(t>m || sum<0)
        return 0;
    if(t==m && sum==0)
        s++;
    for(int i=k;i>=1;i--)
        s+=f(t+1,sum-i,i);
    return s;
}
int main()
{
    scanf("%d %d",&n,&m);
    for(int i=n;i>=1;i--)
        tot+=f(1,n-i,i);
    printf("%d\n",tot);
}
/*
    结果:评测通过
    运行时间:0 ms
    运行空间:296 KB 
    代码长度:343 bytes
*/

IN THE END

首先,对于题,我没有什么可说的
其次,对于题,我没有什么可说的
最后,对于题,我没有什么可说的

( ⊙ o ⊙ )蛤?完了?

~\(≧▽≦)/~对!作者去浪啦!

你可能感兴趣的:(C++入门,DP入门,CCF题目)