链接:https://ac.nowcoder.com/acm/contest/24213/1001 来源:牛客网
题目描述 现在有一个大小n1的收纳盒,我们手里有无数个大小为11和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒
输入描述: 第一行是样例数T 第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。 输出描述: 对于每个样例输出对应的方法数 示例1 输入 复制 3 1 2 4 输出 复制 1 2 5 说明 n=4,有五种方法 1:1 1 1 1 2:2 1 1 3:1 2 1 4:1 1 2 5:2 2 备注: 对于100%的数据, 0 < T < 80; 0 < n <= 80。 从集合角度 **题解:
f[j]表示体积为j的方案总数---以最后一个不同点(选择1还是2)划分集合,由于集合属性为数量(所以要将所有状态相加+) 地f[j]=fj-i **
#include<bits/stdc++.h>
using namespace std;
const int N=100;
typedef long long ll;
ll f[N];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(f,0,sizeof(f));
int n;
cin>>n;
f[1]=1,f[2]=2;
for(int j=1;j<=n;j++)
{
if(j<=2)continue;
for(int i=1;i<=2;i++)
{
if(j>=i)
f[j]+=f[j-i];
}
}
cout<<f[n]<<endl;
}
return 0;
}