放苹果——华为机试题

来源:互联网 发布:淘宝怎么查看消费记录 编辑:程序博客网 时间:2024/06/08 04:52

题目描述

题目描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。


输入

每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。


样例输入

7 3


样例输出

8


/**

* 计算放苹果方法数目


* 输入值非法时返回-1

* 1 <= m,n <= 10

* @param m 苹果数目

* @param n 盘子数目数

* @return 放置方法总数

*

*/

public static int count(int m, int n)


输入描述:

输入两个int整数



输出描述:

输出结果,int型


输入例子:
7 3

输出例子:
8
//看成组合问题,从一个数组中选不多余n个数,使其和为m。使用dfs
#include <iostream>#include <vector>using namespace std;void print(vector<int>& s){for(int i=0;i<s.size();i++)cout<<s[i]<<" ";cout<<endl;}void dfs(int m,int n, int i,int & ans,int &sum,int start,vector<int>& s){    if(i>=n)        return ;    for(int j=start;j<=m;j++){    s.push_back(j);    sum+=j;         if(sum==m) {        ans++;        //print(s);}                dfs(m,n,i+1,ans,sum,j,s);        sum-=j;        s.pop_back();    }}int main(){   int m,n,ans,sum;   while(cin>>m>>n) {       ans=sum=0;vector<int> s;       dfs(m,n,0,ans,sum,1,s);        cout<<ans<<endl;   }        return 0;}


0 0
原创粉丝点击