Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Specia
数位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相关推荐
- 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这个时候两 ...
- 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 ...
- 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树
链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- 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, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
最新文章
- 写了六个相同功能的函数之后,我学到了什么
- Matlab中将数据保存为txt或dat格式四种方案
- jenkins中Git Parameter Plugin使用
- IOS自带正则表达式NSPredicate的使用
- 算法基础:递归算法知识笔记
- 二叉树介绍与代码实现
- 【批处理】windows环境将文件放置在虚拟盘
- Python中的闭包与装饰器及工厂模式
- 用CLIP增强视频语言的理解,在VALUE榜单上SOTA!
- Web前端开发必备工具推荐
- BFC与边距重叠详解
- IOS 之 NSBundle 使用
- oracle 启动_oracle实验--通过gdb工具研究数据库启动过程
- 电脑无限循环cmd代码 Window系统下死循环
- topjui的表格怎么得到行与列的数据
- 华为交换机Hybird 与 单臂路由
- html中siblings方法,siblings()
- 数据分析能力的8个等级
- 重新定义股票交易中的试错和复盘
- c++新手入门(不定时更新,已肝18500字)
热门文章
- CSUOJ 1644 超能陆战队
- 全国计算机四级嵌入式系统开发工程师
- 发那科2021参数_发那科系统FANUC:参数修改。
- (筆記) 如何使用Debussy與ModelSim做Co-Simulation? (SOC) (Verilog) (VHDL) (Debussy) (ModelSim)
- 如何实现系统公告或系统消息
- android 悬浮按钮和可交互提示,悬浮按钮的使用原则
- 学习编程(c语言)的经历以及对未来的期望
- 我对计算机专业的看法及对未来的计划
- 【判断题】【简答题】【数据库原理】
- 自动控制原理笔记-控制系统的数学模型