数位dp

预处理1-1000中经过刚好经过k-1次变换到1的数.
然后搞一个数位dp, 当limit为false的时候可以在后面用组合数放置1.
要特判k==0(只有1满足)k==1(1不满足要减去)

#include <bits/stdc++.h>
using namespace std;
vector<int> vec;
template<class T>
T read()
{T x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}while(ch >= '0' && ch <= '9') {x = 10 * x + ch - '0'; ch = getchar();}return x * f;
}
int a[1010];
char s[1010];
int one[1010];
const long long mod = 1e9 + 7;
long long dp[1010][1010];
bool is[1010];
long long C[1010][1010];
inline int lowbit(int x)
{return x & (-x);
}long long dfs(int pos, int num, bool limit)
{if(pos == -1) return is[num] == true;if(!limit && ~dp[pos][num]) return dp[pos][num];long long res = 0;if(limit)for(int i = 0; i <= a[pos]; ++i)res = (res + dfs(pos - 1, num + (i == 1), limit && i == a[pos])) % mod;else{for(auto u : vec){if(u > num + pos + 1) break;if(u < num) continue;res = (res + C[pos + 1][u - num]) % mod;}}return limit ? res : dp[pos][num] = res;
}
long long get()
{int len = strlen(s);for(int i = 0; i < len; ++i) a[i] = s[len - i - 1] - '0';return dfs(len - 1, 0, true);
}
int main()
{one[0] = 0;for(int i = 1; i <= 1000; ++i) one[i] = one[i ^ lowbit(i)] + 1;scanf("%s", s);memset(dp, -1, sizeof dp);memset(is, false, sizeof is);int k = read<int>();if(k == 0) return puts("1"), 0;for(int i = 1; i <= 1000; ++i){int t = k, tmp = i, f = 1;while(--t){if(tmp == 1) f = 0;tmp = one[tmp];}if(f && tmp == 1){vec.push_back(i);is[i] = 1;}}C[0][0]= 1;for(int i = 1; i <= 1000; ++i) C[i][0] = C[i][i] = 1;for(int i = 2; i <= 1000; ++i)for(int j = 1; j < i; ++j) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;printf("%I64d\n", (get() + (mod - 1) * (k == 1)) % mod);return 0;
}

Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Specia相关推荐

  1. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  2. Educational Codeforces Round 61 (Rated for Div. 2)(A、B、C、D、E、F)

    欢迎访问本菜鸡的独立博客:Codecho 比赛名称 Educational Codeforces Round 61 (Rated for Div. 2) 比赛链接 https://codeforces ...

  3. 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树

    链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...

  4. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  5. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  6. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  7. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  8. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  9. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

最新文章

  1. 写了六个相同功能的函数之后,我学到了什么
  2. Matlab中将数据保存为txt或dat格式四种方案
  3. jenkins中Git Parameter Plugin使用
  4. IOS自带正则表达式NSPredicate的使用
  5. 算法基础:递归算法知识笔记
  6. 二叉树介绍与代码实现
  7. 【批处理】windows环境将文件放置在虚拟盘
  8. Python中的闭包与装饰器及工厂模式
  9. 用CLIP增强视频语言的理解,在VALUE榜单上SOTA!
  10. Web前端开发必备工具推荐
  11. BFC与边距重叠详解
  12. IOS 之 NSBundle 使用
  13. oracle 启动_oracle实验--通过gdb工具研究数据库启动过程
  14. 电脑无限循环cmd代码 Window系统下死循环
  15. topjui的表格怎么得到行与列的数据
  16. 华为交换机Hybird 与 单臂路由
  17. html中siblings方法,siblings()
  18. 数据分析能力的8个等级
  19. 重新定义股票交易中的试错和复盘
  20. c++新手入门(不定时更新,已肝18500字)

热门文章

  1. CSUOJ 1644 超能陆战队
  2. 全国计算机四级嵌入式系统开发工程师
  3. 发那科2021参数_发那科系统FANUC:参数修改。
  4. (筆記) 如何使用Debussy與ModelSim做Co-Simulation? (SOC) (Verilog) (VHDL) (Debussy) (ModelSim)
  5. 如何实现系统公告或系统消息
  6. android 悬浮按钮和可交互提示,悬浮按钮的使用原则
  7. 学习编程(c语言)的经历以及对未来的期望
  8. 我对计算机专业的看法及对未来的计划
  9. 【判断题】【简答题】【数据库原理】
  10. 自动控制原理笔记-控制系统的数学模型