题解 UVA580 【危险的组合】

一.题意

有一些装有铀(用 U  表示)和铅(用 L 表示)的盒子,数量均足够多。要求把 N 个盒子放成一行,但至少有 3U 放在一起,有多少种方法?

二.解法

一种常见套路:方案数=总方案数-不合法方案数。

总方案数简单:2n(铀和铅两种元素组合)。

不合法方案数:dpi 表示第 i 个位置以 L 结尾的总数。

组成dpi的集合有:dpi1,dpi2,dpi3(因为结尾是L , 距离又不会超过 3 ,因此肯定不满足至少有 3U 放在一起)。

所以递推式子是:
dpi=dpi1+dpi2+dpi3

三.代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<bits/stdc++.h>
using namespace std;
int n,f[100];
int main(){
    int ans=1;
    f[1]=2;
    f[2]=4;
    f[3]=7;
    for(int i=4;i<=99;i++){
        f[i]=f[i-1]+f[i-2]+f[i-3];//递推式
    }
    while(cin>>n&&n){
        ans=1;
        for(int i=1;i<=n;i++){
            ans*=2;
        }
        cout<<ans-f[n]<<endl;
    }
    return 0;
}

  

posted @   21xf2257  阅读(125)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示