Critical Mass

本文介绍了一种解决CriticalMass问题的方法,该问题旨在计算当危险物品连续出现超过三次时的危险情况数量。通过预处理安全状态的数量并利用动态规划的思想,文章提供了一个简洁高效的解决方案。

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;

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值