题目传送门

一句话题意:求长度为n的有m个1的大小为第k个的01串。

暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点。

正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想。

  状态:设f[i][j]表示i位二进制数,1的个数不超过j的种类数。

  转移:f[i][j]=f[i-1][j]+f[i-1][j-1] (当前位取0或1)

  初值:f[i][0]=0,f[0][i]=0;

然后?我们尝试倒序枚举答案。我们知道在二进制中最高位为1时一定比最高位为0的情况大,所以我们在尝试的过程中,如果当前的k仍大于f[i-1][j],则第i位一定为1,因为还没达到第k个的要求。所以我们不断将k减去f[i-1][j],这样不断向下枚举就能得到答案。

Code

 #include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; int n,m;
ll pos,f[][]; int main()
{
scanf("%d%d%lld",&n,&m,&pos);
for(int i=;i<=n;i++) f[i][]=,f[][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(j<=i) f[i][j]=f[i-][j]+f[i-][j-];
else f[i][j]=f[i][i];
int a=n,b=m;
while(a!=)
{
if(pos>f[a-][b])
{
pos-=f[a-][b];
printf("");
a--;b--;
}
else
{
printf("");
a--;
}
}
printf("\n");
return ;
}

* 注意:开long long 。防止越界。(2^31)

最新文章

  1. CentOS随笔 不断添加
  2. css 表格
  3. python3-day2-python基础2
  4. jmeter的压力测试
  5. [转]Vimium快捷键
  6. 【转】 Ucenter同步登录原理解析
  7. [AngularJS] Html ngSanitize, $sce
  8. 3d旋转--transform-style: preserve-3d,translate3d(x,y,z),perspective()
  9. 向架构师进军---&amp;gt;怎样编写软件架构文档
  10. mssql sql高效关联子查询的update 批量更新
  11. ubuntu 更改文件所有者
  12. 蓝牙连接音响问题(android电视)
  13. Asynchronous and Distributed Programming in R with the Future Package
  14. 学习python的第一个小目标:通过requests+xlrd实现简单接口测试,将测试用例维护在表格中,与脚本分开。
  15. Android - Fragment (一)定义
  16. Neo4j学习笔记(2)——数据索引
  17. 【xsy2115】Delight for a Cat
  18. Centos 使用yum安装MongoDB 4.0
  19. hydra 安装和使用
  20. 五步打造APP节日主题设计:以Lofter新年图标设计为例

热门文章

  1. Photoshop 更改图片颜色
  2. OTT
  3. ubuntu搭建samba服务器
  4. 获取Bootstrap-Table的所有内容,修改行内容
  5. fstab文件解析
  6. mongo-java-driver
  7. java中创建对象的五种方法
  8. javascript if(xx)
  9. react native 中的ListView
  10. 织梦DedeCMS未审核文章更新为当前时间