【动态规划】【USACO】Stringsobits

该博客介绍了如何使用动态规划方法解决USACO中的字符串问题,即找到有序集合中第I个满足N位长度且1的位数不超过L的二进制数。通过构建f[i][j]矩阵计算不同长度和1数量的二进制数个数,然后回溯找到目标答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1.

This set of strings is interesting because it is ordered and contains all possible strings of length N that have L (1 <= L <= N) or fewer bits that are `1'.

Your task is to read a number I (1 <= I <= sizeof(S)) from the input and print the Ith element of the ordered set for N bits with no more than L bits that are `1'.

PROGRAM NAME: kimbits

INPUT FORMAT

A single line with three space separated integers: N, L, and I.

SAMPLE INPUT (file kimbits.in)

5 3 19

OUTPUT FORMAT

A single line containing the integer that represents the Ith element from the order set, as described.

SAMPLE OUTPUT (file kimbits.out)

10011

描述

考虑排好序的N(N<=31)位二进制数。

你会发现,这很有趣。因为他们是排列好的,而且包含所有长度为N且这个二进制数中1的位数的个数小于等于L(L<=N)的数。

你的任务是输出第i(1<=i<=长度为N的二进制数的个数)小的(注:题目这里表述不清,实际是,从最小的往大的数,数到第i个符合条件的,这个意思),长度为N,且1的的位数的个数小于等于L的那个二进制数。

(例:100101中,N=6,含有位数为1的个数为3)。

[编辑]格式

PROGRAM NAME: kimbits

INPUT FORMAT:

(file kimbits.in)

共一行,用空格分开的三个整数N,L,i。

OUTPUT FORMAT:

(file kimbits.out)

共一行,输出满足条件的第i小的二进制数。.

[编辑]SAMPLE INPUT

5 3 19

[编辑]SAMPLE OUTPUT

10011

 


 

动态规划,f[i][j]表示长度为I的二进制数最多1的个数为j的数的个数。

输出看程序,一看就能懂的。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值