当前位置: 代码迷 >> 综合 >> Critical Mass
  详细解决方案

Critical Mass

热度:99   发布时间:2023-12-07 01:29:23.0

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;

}


 

  相关解决方案