当前位置: 首页 > news >正文

UVA - 580 Critical Mass 四种方法(dp/暴力)

题目链接


吐槽:组合数学的方法是最难想的(对本题而言)

dp

方法一

这种是比较容易想到的DP,求安全系数。设 f [ i ] [ 0 / 1 / 2 ] f[i][0/1/2] f[i][0/1/2]分别表示当前第 i i i位以 L ; U ; U U L;U;UU L;U;UU结尾的个数,显然当要出现三个 U U U时立刻截断,则:

int solve1(int n){
    f[1][0]=f[1][1]=1;
    f[1][2]=0;
    for(int i=2;i<=30;i++){
        f[i][0]=f[i-1][0]+f[i-1][1]+f[i-1][2];
        f[i][1]=f[i-1][0];
        f[i][2]=f[i-1][1];
    }
    return (1<<n)-f[n][0]-f[n][1]-f[n][2];
}

方法二

若考虑直接求危险系数,那么设 d [ i ] d[i] d[i]为长度为 i i i的危险个数,显然有两种情况:

  • 若前面已经满足出现三个 U U U,则当前需要累加 d [ i − 1 ] ∗ 2 d[i-1]*2 d[i1]2
  • 若前面的不满足,因为不满足的情况比较难求,我们考虑求前面的总个数减去安全组合数,因为如果前面的不满足,现在的最后四个必须是 L U U U LUUU LUUU,前 i − 4 i-4 i4个的总个数为 2 i − 4 2^{i-4} 2i4,减去的个数应该是长度为 i − 4 i-4 i4的满足的个数(这个已经求出)
int solve2(int n){
    d[3]=1,d[4]=3;
    for(int i=5;i<=30;i++)
        d[i]=d[i-1]*2+(1<<i-4)-d[i-4];
    return d[n];
}

方法三

这个暂时没有看懂

int solve3(int n){
    d[1]=2,d[2]=4,d[3]=7;
    for(int i=4;i<=30;i++){
        d[i]=d[i-1]+d[i-2]+d[i-3];
    }
    return (1<<n)-d[n];
}

暴力搜索

最大为30,显然可以爆搜,如果害怕超时可以打表提交:

void dfs(int cur){
    if(cur==n+1){
        ans++;
        //for(int i=1;i<=n;i++) cout<<d[i]; cout<<endl;
        return;
    }
    if(cur>=3){
        for(int i=1;i>=0;i--){
            if(i==1 && d[cur-1]==1 && d[cur-2]==1){
                d[cur]=0;
                dfs(cur+1);
                break;
            }
            d[cur]=i;
            dfs(cur+1);
        }
    }else{
        for(int i=0;i<2;i++){
            d[cur]=i;
            dfs(cur+1);
        }
    }
}

相关文章:

  • 全球20国互联网网速、网费统计:日韩最快最便宜
  • 2020 牛客多校第一场J - Easy Integration(求积分/找规律)
  • 转载:宏定义的一些使用技巧总结
  • 2020 WHU校赛 J - Jogging along the Yangtze River(组合数学+卡特兰数)
  • 数据库设计(2009)
  • UVA - 10288 Coupons(期望的性质)
  • 网络存储的基本常识
  • Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math(LCM)
  • 当一个割草男孩
  • Codeforces Round #655 (Div. 2) C. Omkar and Baseball(思维)
  • 方阵(gcd+找规律)
  • 2020牛客暑期多校第二场 C - Cover the Tree(思维/贪心)
  • 网页中的flash加载资源时的路径相对于谁?
  • 2020牛客暑期多校第二场 B - Boundary(简单计算几何)
  • MTK调试入门之一------TRACE使用的技巧
  • ES6--对象的扩展
  • FastReport在线报表设计器工作原理
  • Java知识点总结(JavaIO-打印流)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Solarized Scheme
  • STAR法则
  • 飞驰在Mesos的涡轮引擎上
  • 好的网址,关于.net 4.0 ,vs 2010
  • 回顾 Swift 多平台移植进度 #2
  • 两列自适应布局方案整理
  • 聊聊redis的数据结构的应用
  • 如何选择开源的机器学习框架?
  • 网页视频流m3u8/ts视频下载
  • 项目实战-Api的解决方案
  • 学习笔记:对象,原型和继承(1)
  • 用element的upload组件实现多图片上传和压缩
  • 进程与线程(三)——进程/线程间通信
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma once
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.ajax中的eval及dataType
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (五)MySQL的备份及恢复
  • (转)平衡树
  • (转载)从 Java 代码到 Java 堆
  • .NET Reactor简单使用教程
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 提取注释生成API文档 帮助文档
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @requestBody写与不写的情况
  • @selector(..)警告提示
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [2023年]-hadoop面试真题(一)
  • [30期] 我的学习方法
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)