Critical Mass
题目大意:U代表危险物品铀,L代表安全物品铅,当U连续数目>=3时,为危险情况。输入数字N代表有四个箱子,每个箱子可以存放U或者L,求危险情况种数。
解题策略:网上有DP解的动态递推公式,还有一个策略是逆向考虑,通过解出安全的情况数,总情况数-安全情况数=危险情况数。
总情况数为2^N种(组合排列),安全情况数满 足add[i] = add[i-1] + add[i-2] + add[i-3],然后循环预处理危险情况,对应输出即可。
#include<stdio.h>
#include<math.h>
#include<cstring>
int a[60];
int n;
void hanshu()
{
memset(a,0,sizeof(a));
a[1]=2;
a[2]=4;
a[3]=7;
for(int i=4;i<60;i++)
a[i]=a[i-1]+a[i-2]+a[i-3];
}
int main()
{
hanshu();
while(scanf("%d",&n)&&n)
{
int sum=pow(2, n);
sum=sum-a[n];
printf("%d\n",sum);
}
return 0;
}