盒子与球问题(8种情况)

编号 球是否相同 盒子是否相同 是否可以空盒
1 相同 相同
2 相同 相同
3 不相同 相同
4 不相同 相同
5 相同 不相同
6 相同 不相同
7 不相同 不相同
8 不相同 不相同

1.球相同,盒相同,有空盒

用f[i][j]记录i个球放到j个盒子的情况,首先可以对f[i][j]进行初始化的操作:

i=0的时候,0个球放到j个盒子里的情况始终为1;

i=1的时候,1个球放到j个盒子里的情况始终为1;

j=1的时候,i个球放到1个盒子里的情况始终为1;

其次对于之后的f[i][j]的情况:
i<j的时候:i个球放到j个盒子的情况与i个球放到j-1个盒子的情况相同

此时:f[i][j]=f[i][j-1];

i>=j的时候:可以由当前第j个盒子为空盒子,j个盒子全放然后处理i-j个球放j个盒子的情况得到;

此时:f[i][j]=f[i][j-1]+f[i-j][j];

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int N=20;
int f[N][N];
void pre(){
	memset(f,0,sizeof(f));
	for(int i=0;i<=15;i++){
		for(int j=0;j<=15;j++){
			if(i=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值