USACO Section 3.2 01串 Stringsobits
题目背景
考虑排好序的N(N<=31)位二进制数。
题目描述
他们是排列好的,而且包含所有长度为N且这个二进制数中1的位数的个数小于等于L(L<=N)的数。
你的任务是输出第i(1<=i<=长度为N的二进制数的个数)小的(注:题目这里表述不清,实际是,从最小的往大的数,数到第i个符合条件的,这个意思),长度为N,且1的位数的个数小于等于L的那个二进制数。
(例:100101中,N=6,含有位数为1的个数为3)。
输入输出格式
输入格式:
共一行,用空格分开的三个整数N,L,i。
输出格式:
共一行,输出满足条件的第i小的二进制数。
最容易想到的方法就是模拟,从0开始利用位移判断枚举的这个数二进制中1的个数是否符合限制,会有一半TLE
#include<iostream>
using namespace std;
;
bool Judge(int x)
{
;
;j<N;j++)
<<j)) count++;
return count<=L;
}
void PrintAns()
{
;j>=;j--)
<<j)) cout<<';
';
}
int main()
{
cin>>N>>L>>i;
;j<=i;j++)
while(!Judge(ans++));
ans--;
PrintAns();
;
}
正确做法是动态规划
设dp(len,count)代表长度len,1的限制为count时的方案数
从左到右判断每一位是0or1 具体看代码
还有一点!如果N,L,i的数据类型变成int而不是unsigned int就会卡一个点(这坑爹的数据)
#include<iostream>
#include<cstring>
using namespace std;
][],mem[][];
unsigned int N,L,i;
int dp(int len,int count){
int& ans=mem[len][count];
if(v[len][count]) return ans;
v[len][count]=;
||len==) ;
,count)+dp(len-,count-);
}
int main()
{
memset(v,,sizeof(v));
cin>>N>>L>>i;
;j>=;j--){
if(dp(j,L)<i){
cout<<;
i-=dp(j,L);
L--;//确定这一位是1后,1的限制要-1
}else{
cout<<;
}
}
;
}
From Linux
USACO Section 3.2 01串 Stringsobits的更多相关文章
- [USACO Section 3.2] 01串 Stringsobits (动态规划)
题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j] ...
- 洛谷P2727 01串 Stringsobits
P2727 01串 Stringsobits 24通过 55提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 这题的思路是啥啊!!!跪求- 题目背景 考虑 ...
- 洛谷 题解 P2727 【01串 Stringsobits】
本蒟蒻又双叒叕被爆踩辣! P2727 01串 Stringsobits 其实只要理解了就会觉得这是个傻逼题! 这题给的标签是 dp,搜索,数论 但是可以用二分的思路做! Solution: 从最高位开 ...
- Luogu P2727 【01串 Stringsobits】
看到题解里好像都是用$DP$解决的,本着禁止DP的原则,我来提供一发纯数学其实和DP本质相同的题解,前两天刚反演题,脑子炸了,本来说换换脑子,结果还是数学 首先受进制思想启发,我们不妨按位考虑,考虑这 ...
- USACO Training3.2 01串 By cellur925
题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...
- COGS 862. 二进制数01串【dp+经典二分+字符串】
862. 二进制数01串 ★ 输入文件:kimbits.in 输出文件:kimbits.out 简单对比 时间限制:1 s 内存限制:128 MB USACO/kimbits(译 by ...
- JZOJ P1847:找01串
传送门 DP预处理+贪心 首先设$f[i][j]$表示长度为$i$的01串中有不大于$j$个1,然后显然 $f[i][j]=\sum_{k=1} ^{j} C[i][k]$ $C[i][j]=C[i- ...
- C++实现01串排序
题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序. 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符. 输出描述:重新排 ...
- 01串(dp)
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个, ...
随机推荐
- js工具类 ----正则
function(value){ if(value){ var reg=new RegExp("^[a-zA-Z0-9_-]+$"); return reg.test(v ...
- 使用mongo-java-driver3.0.2.jar和mongodb3.0在java代码中的用户验证4
以下是使用mongo-java-driver3.0.2.jar和mongodb3.0.4在java代码中的用户验证: ServerAddress sa = new ServerAddress(host ...
- C#中的 int?是什么意思
http://www.cnblogs.com/firstcsharp/archive/2011/12/11/2283797.html int?:表示可空类型,就是一种特殊的值类型,它的值可以为null ...
- iphone Dev 开发实例10:How To Add a Slide-out Sidebar Menu in Your Apps
Creating the Xcode Project With a basic idea about what we’ll build, let’s move on. You can create t ...
- MVC controller and View
actionresult,jsonresult redirectresult partialview, viewdata, tempdata filter viewdata,只能在当前action中有 ...
- jdbc:java数据库连接
1.导jar包 四大参数: 1.加载驱动类:Class.forName("com.mysql.jdbc.Driver"); 2.url:jdbc:mysql://localhost ...
- MYSQL 安装更新,使用,管理,备份和安全等
如何安装更新,使用,管理,备份和安全,维护优化一个MYSQL系统. 一.MYSQL发展历史,特点.对SQL语法进行介绍 二.如何安装一个MYSQL系统 三四.如何利用SQL语言以及其他的客户工具对MY ...
- 测试相关、sdk卡读取
测试: monkey 猴子 测试整个系统 adb shell monkey -v 1000 (-v 指定模拟测试的事件数量) 测试某个程序 adb shell monkey -p <程序的包名& ...
- MethodNotAllowedHttpException
原因:1.没有加表单{{csrf_field()}}:2.除get提交以外,其它提交方式都要csrf_token();3.提交的路由非法,没有定义.
- 30天轻松学习javaweb_https协议的密码学
https通过非对称加密实现数据安全1.CA机构提供数字证书,其中数字证书包含公钥.2.浏览器自带功能验证数字证书是否是CA机构颁发的.3.根据数字证书包含的公钥对表单数据进行加密.4.公钥提供方再根 ...