题解 UVA580 【危险的组合】
一.题意
有一些装有铀(用 表示)和铅(用 表示)的盒子,数量均足够多。要求把 个盒子放成一行,但至少有 个 放在一起,有多少种方法?
二.解法
一种常见套路:方案数=总方案数-不合法方案数。
总方案数简单:(铀和铅两种元素组合)。
不合法方案数: 表示第 个位置以 结尾的总数。
组成的集合有:(因为结尾是 , 距离又不会超过 ,因此肯定不满足至少有 个 放在一起)。
所以递推式子是:
三.代码:
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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】