zoukankan      html  css  js  c++  java
  • URAL 1081 Binary Lexicographic Sequence

    URAL 1081

    思路

    状态:dp[i]表示长度为i的方案数

    初始状态:dp[0]=1,dp[1]=2

    状态转移:dp[i]=dp[i-1]+dp[i-2],在长度为i-1的串的前面加0,在长度为i-2的串前面加10

    对于第i位如果k大于dp[i-1],那么说明这一位时1(k减去dp[i-1]),不然这一位就是0,因为如果这一位是0,那么k最大只能为dp[i-1]

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    int dp[55];
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n,k;
        cin>>n>>k;
        dp[0]=1;
        dp[1]=2;
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        if(k>dp[n]){
            cout<<-1<<endl;
            return 0;
        }
        while(n){
            if(k>dp[n-1]){
                k-=dp[n-1];
                cout<<1;
            }
            else {
                cout<<0;
            }
            n--;
        }
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    pinus学习(3)
    pinus学习(2)
    HBASE架构解析(二)
    排序算法
    泛型原理
    《JAVA NIO》第二章缓冲区
    @SuppressWarnings
    网络编程
    synchronized原理
    第十六节:pandas之日期时间
  • 原文地址:https://www.cnblogs.com/widsom/p/8377070.html
Copyright © 2011-2022 走看看