zoukankan      html  css  js  c++  java
  • OJ刷题——核电站问题

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

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

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

    样例输入
    1
    2
    3
    4
    10

    样例输出
    2
    4
    7
    13
    504

    附上代码

    import java.util.Scanner;
    
    public class Main{
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan = new Scanner(System.in);
            while(scan.hasNext()) {
                int n = scan.nextInt();
                System.out.println(searchSolution(n,3));
            }
        }
    
        public static int searchSolution(int n, int m) {
            int f[] = new int[n+1];
            f[0] = 1;
            for (int i = 1; i <= n; i++) {
    
                if (i < m)//第i个坑道只有放或者不放2种情况
                    f[i] = 2 * f[i - 1];
                if (i == m)////第i个坑道只有放或者不放2种情况,减去的1是前m坑道都放的情况,因为前面都放了,这个就只能空,只有一种情形
                    f[i] = 2 * f[i - 1] - 1;
                if (i > m)/*有两种情况,前 i-1 个不发生爆炸,第 i 个可放可不放,f[i-1]*2
                            但有种情况不知符合道要求,即第 i-m+1 ... i 个都放了(专最后 m 个不符合要求),但第 i-m ... i-1 是符合要求的
                            所以当第 i-m 个没有放,第 i-m+1 ... i 个放了的情况下是多计算的,减去这部分(f[i-m-1])即可*/
                    f[i] = 2 * f[i - 1] - f[i - m - 1];
            }
            return f[n];
        }
    }
  • 相关阅读:
    肩部肌肉劳损zt
    大屏幕手机上网页字体显示很小的问题
    SWT的Display
    The connection to adb is down, and a severe error has occured.
    [ZT]使用tmpfs缓存文件提高性能
    Mutex
    javascript阻塞加载问题【转】
    IE参考
    2台电脑网线对接注意的事项
    重建索引
  • 原文地址:https://www.cnblogs.com/lzhxue/p/12689526.html
Copyright © 2011-2022 走看看