我自己对这道题的一种解法,思路我求证了我的导师应该是对的,但是无法解决,求解惑
查看原帖
我自己对这道题的一种解法,思路我求证了我的导师应该是对的,但是无法解决,求解惑
519936
Lqz114514楼主2022/5/6 19:48

这道题由于本人才初中,对这类数学没有了解,所以我的思路是这样的 我把这个问题想象成把物品放进盒子里,那么当我指定我手上有i个物品,有j个盒子时,我有放第i个物品和不放第i个物品两种做法 当我放的时候,我可以得到,f(i,j)=f(i-1,j-1) 当我不放的时候,那么f(i,j)=f(i-1,j),然而呢,这个物品我最终还是要放进盒子里,然而我可以放进这j个盒子中的任意一个,那么得到f(i,j)=j*f(i-1,j) 所以我们最终得到状态转移方程f(i,j)=f(i-1,j-1)+j*f(i-1,j) 那么我们只需要把有j个盒子的这个j从1遍历到n就解决了 然而最后还是错的...... 下面是我的代码

#include <bits/stdc++.h>
using namespace std;
int huafen(int i,int j)
{
	if(i==j) return 1;
	if(i<j) return 0;
	if(i<0) return 0;
	return huafen(i-1,j-1)+j*huafen(i-1,j);
}
int main()
{
	int n[1005],t,i;
	long long ans[1005];
	cin>>t;
	for(i=0;i<t;i++) 
		cin>>n[i];
	for(i=0;i<t;i++)
	{
		for(int j=1;j<=n[i];j++) 
			ans[i]+=huafen(n[i],j);
		cout<<ans[i]<<endl;
	}
}
2022/5/6 19:48
加载中...