题目链接:Travelling Salesman and Special Numbers

题意:

  给出一个二进制数n,每次操作可以将这个数变为其二进制数位上所有1的和(3->2 ; 7->3),现在给出了一个数k,问不大于n的数中有几个数经过k次操作可以变成1。

题解:

  因为所给的n很大,但是可以发现只要经过一次操作,n都会变成1000以内的数,所以可以把1000以内的数的答案都存下来。每次在这里面找等于k-1的数,然后数位DP求个数。

 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e3+;
const int MOD = 1e9+;
char s[MAX_N];
int len;
int f[MAX_N][MAX_N];
long long res[MAX_N];
void init()
{
memset(f,-,sizeof(f));
for(int i=;i<=;i++)
{
int t = i;
int num = ;
while(t>)
{
int temp = ;
while(t)
{
t -= t&-t;
temp++;
}
t = temp;
num++;
}
res[i] = num;
}
}
int dp(char *s,int pos,int num,int tar,int limit)
{
if(num > tar || tar>) return ;
if(pos == len)
{
if(num == tar) return ;
else return ;
}
if(!limit && f[pos][tar-num]!=-) return f[pos][tar-num];
int up = limit?s[pos]-'':;
int ans = ;
for(int i=;i<=up;i++) ans = (ans + dp(s,pos+,i==?num+:num,tar,limit&&i==up))%MOD;
if(!limit) f[pos][tar-num] = ans;
return ans;
}
int main()
{
init();
scanf("%s",s);
len = strlen(s);
int num = ;
int k;
cin>>k;
if(k==)
{
cout<<<<endl;
return ;
}
if(k==)
{
cout<<len-<<endl;
return ;
}
long long ans =;
for(int i=;i<len;i++) if(s[i] == '') num++;
for(int i=;i<=;i++)
{
if(res[i] == k-)
{
ans = (ans + dp(s,,,i,))%MOD;
//cout<<"...."<<i<<"....."<<dp(s,0,0,i,1)<<endl;
}
}
cout<<ans<<endl;
}

Codeforces 914 C. Travelling Salesman and Special Numbers (数位DP)的更多相关文章

  1. Codeforces 914 C Travelling Salesman and Special Numbers

    Discription The Travelling Salesman spends a lot of time travelling so he tends to get bored. To pas ...

  2. Codeforces 914C Travelling Salesman and Special Numbers (数位DP)

    题意:题目中定义了一种运算,把数字x变成数字x的二进制位数.问小于n的恰好k次运算可以变成1的数的个数(题目中的n是二进制数,n最大到2^1000) 思路:容易发现,无论多么大的数,只要进行了一次运算 ...

  3. Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)

    题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...

  4. Codeforces 914C Travelling Salesman and Special Numbers:数位dp

    题目链接:http://codeforces.com/problemset/problem/914/C 题意: 对数字x进行一次操作,可以将数字x变为x在二进制下1的个数. 显然,一个正整数在进行了若 ...

  5. Travelling Salesman and Special Numbers CodeForces - 914C (数位dp)

    大意: 对于一个数$x$, 每次操作可将$x$变为$x$二进制中1的个数 定义经过k次操作变为1的数为好数, 求$[1,n]$中有多少个好数 注意到n二进制位最大1000位, 经过一次操作后一定变为1 ...

  6. 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Special Numbers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现. 进行一次操作过后. 得到的数字肯定是<=1000的 然后1000以下可以暴力做的. 则我们枚举第1步后得到的数字x是 ...

  7. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...

  8. codeforces 55D - Beautiful numbers(数位DP+离散化)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  9. Codeforces Beta Round #51 D. Beautiful numbers 数位dp

    D. Beautiful numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/p ...

随机推荐

  1. 自定义UITabbarController控制器

    自定义UITabbarController控制器 这是定制UITabbarController的基本原理,没有进行功能性封装. 效果:   源码地址: https://github.com/YouXi ...

  2. 作业一 制作PC配置 吴昊

  3. 生成器-yield初接触

    什么是生成器? 生成器的实质就是迭代器 在python中有三种方式来获取生成器 1. 通过生成器函数 2. 通过各种推导式实现生成器 3. 通过数据的转换也可以获取生成器 将函数中的return换成y ...

  4. java Date日期类和SimpleDateFormat日期类格式

    ~Date表示特定的时间,精确到毫秒~构造方法:public Date()//构造Date对象并初始化为当前系统的时间public Date(long date) //1970-1-1 0:0:0到指 ...

  5. gp数据库停止

    greenplum是2(master)+7(segment)的集群规模 系统刚准备上线,是用来做统计数据库的,正在帮忙一个hadoop集群核对其数据的准确性,在这个greenplum库中入了清单数据 ...

  6. C#基础学习之委托的理解和应用

    委托的使用和语法定义 委托的使用是由四步来完成的,依次为:声明委托.创建委托对象.委托关联方法.调用 我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现. 首先我们应 ...

  7. (动态)代理于HOOK的区别于关系

    代理模式是MITM中间人攻击模式: 是拦截对象的所有交互,然后进行处理转发: HOOK模式是定点拦截,只针对单个函数做处理转发: HOOK模式可以在动态代理模式基础上实现:因为代理模式拦截所有.

  8. virtualbox+vagrant学习-2(command cli)-27-vagrant connect命令

    Connect 命令: vagrant connect NAME connect命令通过启用对共享环境的访问来补充share命令.你可以在“vagrant share”部分了解有关vagrant sh ...

  9. virtualbox+vagrant学习-2(command cli)-10-vagrant Port命令

    Port 格式: vagrant port [options] [name|id] 端口命令显示映射到主机端口的客户端口的完整列表 userdeMacBook-Pro:~ user$ vagrant ...

  10. 1、Orcal下载安装步骤图文详解

    1.Orcal官方下载地址: https://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.htm ...