zoukankan      html  css  js  c++  java
  • 1081. Binary Lexicographic Sequence 动态规划

    概要:合法01串中字典序第K大

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1081

    题意:

    一个长度为n的,只含01的串。定义一个串为合法串,就是说串中不出现相邻1。问合法串中字典序第K大的是什么。

    解析:

    我们考虑到这样一个性质:

    比如说我们有长度为3的一个串,那么我们怎样构造一个长度为4的串,我们可以在前面添加0或者说1,那么我们是不是只需要考虑最高位就行了。

    dp[i][1]:表示长度为i的最高位为1的串的个数。dp[i][0]:表示长度为i的最高位为0的个数,那么:

    dp[i+1][1]=dp[i][0];

    dp[i+1][0]=do[i][1]+dp[i][0];

    dp[1][0]=d[1][1]=1;

    我们现在就可以知道长度为n的合法字符串的个数了。然后再利用数位dp的思想,对每一位是打印1还是0进行讨论。

    可以这样说,只要K确定,那么每位数是0还是1就已经钦定了。(废话)

    for(int i=N;i>=1;--i)

    if(dp[i][0]>=K)打印0

    else  打印1, K-=dp[i][0]

    感觉这种想法有点cooool啊

  • 相关阅读:
    express 连接 moogdb 数据库
    数组 去重
    vue 路由meta 设置title 导航隐藏
    :src 三目运算
    axios baseURL
    js对象修改 键
    Swiper隐藏后在显示滑动问题
    字符串中的替换
    获取服务器时间
    vue a链接 添加参数
  • 原文地址:https://www.cnblogs.com/sun-yinkai/p/8085088.html
Copyright © 2011-2022 走看看