1212: 核电站问题动态规划等多种方法(以及二进制模拟)

问题

1212: 核电站问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 725 解决: 435

一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数。

输入
输入文件只有多行,每行对应一个正整数N<=40;

输出
输出文件有多行,每行只有一个正整数,表示方案总数

样例输入 Copy
1
2
3
4
10
样例输出 Copy
2
4
7
13
504

小白的代码

二进制模拟

我自己用的方法,折腾了三个多小时!!!
n个坑,当成n个二进制位
放弹为1,不放蛋为0

#include <iostream>
#include <cmath>
using namespace std;

int main() {
   
    int N;
    int cnt; // 符合要求的二进制数
    int rep = 0; // 用一个数的二进制 0 和 1 的情况来模拟有无放核弹, rep来记录连续的 1 的个数
    while(cin >> N) {
   
        cnt = 0; // 
        int num;
        int findThreeBomb;
        int bitDigi;
        // int index; // 使用滑动窗口,检测一个窗口里的3个坑是否都是1
        num = pow(2, N); // N 个二进制坑都装了1,代表的值为 pow(2, N + 1) - 1
        for (int j = 0; j < num; j++) {
   
            // rep = 0;
            findThreeBomb = 0; // 标记 3 个连续 1
            // index = -1;
            bitDigi = 7; // 初始化
            for (int i = 0; i < N; i++) {
    
                if (i > 2) bitDigi = (7 << (i - 2)); // 3 个 111(对应10进制中的7) 
                else bitDigi = 7
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值