【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

会发现。
进行一次操作过后。
得到的数字肯定是可以写一个数位dp的。

即统计二进制数字y,满足y中1的个数为x然后y<=n

(一旦已经小于n了,则直接用组合数算方案就可以了

k=0和k=1要特殊处理一下

具体看代码

【代码】

#include <bits/stdc++.h>
#define ll long long
using namespace std; const int N = 1e3;
const ll MOD = 1e9+7; int k,a[N+10],n;
ll ans = 0,C[N+10][N+10];
string s;
vector<int> v; int GetNext(int x){
int y = 0;
while (x){
y+=(x&1);
x>>=1;
}
return y;
} void dfs(int pos,int rest,bool xiao){
if (n-pos+1<rest) return;
if (rest==0){
ans = (ans+1)%MOD;
return;
}
if (pos>n) return; if (xiao){
ans = (ans + C[n-pos+1][rest])%MOD;
return;
}
if (a[pos]==1){
dfs(pos+1,rest-1,xiao);
dfs(pos+1,rest,true);
}else{
if (xiao) dfs(pos+1,rest-1,xiao);
dfs(pos+1,rest,xiao);
}
} int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0); for (int i = 0;i <=N;i++)
C[i][i] = C[i][0] = 1;
for (int i = 1;i <= N;i++)
for (int j = 1;j <= i-1;j++)
C[i][j] = (C[i-1][j]+C[i-1][j-1])%MOD; cin >> s;
cin >>k; for (int i = 0;i<(int) s.size();i++)
a[i+1] = s[i]-'0';
n = (int)s.size(); if (k==0){
cout <<1<<endl;
return 0;
} //what if n==1 k==0
for (int i = 1;i <=N;i++){
int x = i;
int step = 0;
while (x!=1){
step++;
x=GetNext(x);
}
if (step==(k-1)) {
v.push_back(i);
}
} for (int i = 0;i<(int)v.size();i++){
dfs(1,v[i],false);
}
if (k==1) {
ans = (ans-1+MOD)%MOD;
}
cout << ans << endl;
return 0;
}

【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Special Numbers的更多相关文章

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

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

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

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

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

    题目链接:Travelling Salesman and Special Numbers 题意: 给出一个二进制数n,每次操作可以将这个数变为其二进制数位上所有1的和(3->2 ; 7-> ...

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

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

  5. 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 ...

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

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

  7. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  8. Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块

    Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ​ ...

  9. Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题

    Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题 [Problem Description] ​ 总共两次询 ...

随机推荐

  1. JAVA版本区块链钱包核心代码

    Block.java package com.ppblock.blockchain.core; import java.io.Serializable; /** * 区块 * @author yang ...

  2. HDU-1225 Football Score 模拟问题(水题)

    题目链接:https://cn.vjudge.net/problem/HDU-1225 水题 代码 #include <algorithm> #include <string> ...

  3. easyui_datagrid使用

    easyui的datagrid显示数据的方式(使用了jQuery) 第一步 创建显示的格式,方法有两种: 第一种:在HTML标签中创建,类似如下的形式,参数可以在标签中设置,也可以在脚本中 这种方式在 ...

  4. notepad++调用python3中文乱码

    使用notepad++,配置好快捷键调用python3,一切就绪,仿佛就差代码了,结果一使用, 中文乱码,一直没有好的解决办法. 最后只能在代码中增加一行重写向输出解决,示例如下: #!/usr/bi ...

  5. PHP取不定个数数组交集

    最近有个需求,有一个N个二维数组,N是动态的,不固定个数,现需取这N个数组的交集内容. 用到的函数是array_intersect_assoc 用法 $result_arr = array_inter ...

  6. PHP实时生成并下载超大数据量的EXCEL文件

    最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...

  7. P4287 [SHOI2011]双倍回文(回文树)

    题目描述 记字符串 w 的倒置为 w^R^ .例如 (abcd)^R^=dcba , (abba)^R^=abba . 对字符串x,如果 x 满足 x^R^=x ,则称之为回文:例如abba是一个回文 ...

  8. Windows安装两个mysql数据库步骤

    因为新旧项目数据库版本号差距太大.编码格式不同.引擎也不同,所以仅仅好装两个数据库. 本次安装两个mysql数据库.版本号各自是4.0.18,5.5.36.都是可运行文件直接安装. 本机上之前已经安装 ...

  9. vue24-webpack+vue-loader

    手动配置自己: webpack+vue-loader webpack加载模块 ------------------------------------- 如何运行此项目? 1. npm install ...

  10. Python: PS 图层混合算法汇总

    本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升.具体的代码如下: import ...