您的位置:首页 > 其它

放苹果

2016-04-15 21:14 357 查看
描述题目描述

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

输入

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

样例输入

7 3

样例输出

8

/**

* 计算放苹果方法数目

* 输入值非法时返回-1

* 1 <= m,n <= 10<><= m,n <= 10<>

* @param m 苹果数目

* @param n 盘子数目数

* @return 放置方法总数

*

*/

public static int count(int m, int n)

知识点循环
运行时间限制10M
内存限制128
输入输入两个int整数

输出输出结果,int型

样例输入7 3
样例输出8
package com.oj5;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Oj {
static int count;
private static void find(int[] flag,int pos,int appleNum,int plateNum,List list){
//System.out.println(appleNum+" "+plateNum+" "+pos);
if(pos==appleNum){
int[] plates = new int[plateNum+1];
for(int i = 0;i < appleNum; i++)
plates[flag[i]]++;
for(int i = 1; i<= plateNum-1; i++)
for(int j = 1;j <= plateNum-i; j++)
if(plates[j]<plates[j+1]){
int temp = plates[j];
plates[j] = plates[j+1];
plates[j+1] = temp;
}
boolean isExist = false;
for(int i = 0;i < list.size(); i++){
int[] arr = (int[]) list.get(i);
int j = 1;
for(;j <= plateNum; j++)
if(plates[j]!=arr[j])
break;
if(j==plateNum+1){
isExist = true;
break;
}
}
if(!isExist)
list.add(plates);
return;
}

for(int i = 1;i <= plateNum; i++){
flag[pos] = i;
find(flag,pos+1,appleNum,plateNum,list);
}
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int appleNum = in.nextInt();
int plateNum = in.nextInt();
int[] flag = new int[appleNum];
List<Integer[]> list = new ArrayList<Integer[]>();
find(flag,0,appleNum,plateNum,list);
System.out.println(list.size());
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: