BZOJ 3209 数位DP】的更多相关文章

枚举1的个数,统计有那么多1的数的个数 /************************************************************** Problem: 3209 User: idy002 Language: C++ Result: Accepted Time:0 ms Memory:844 kb ****************************************************************/ #include <cstdio>…
思路: 先预处理出来组合数 按位做 枚举sum[x]是多少 注意Mod不是一个质数 //By SiriusRen #include <cstdio> using namespace std; #define int long long int n,top,w[66],C[66][66],ans=1,cnt,Mod=10000007; int pow(int x,int y){ int res=x,tmp=1; while(y){ if(y&1)tmp=(tmp*res)%Mod; re…
收获: 1.如果有很多位操作,并且不包含+-×/等高级运算,那么可以一位一位考虑,如果求一个最优解,可以尝试逐位确定,这道题因为原始攻击值有范围,那么就需要数位DP. /************************************************************** Problem: 3668 User: idy002 Language: C++ Result: Accepted Time:288 ms Memory:804 kb ******************…
很裸的数位dp. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PII pair<int, int> #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; ; ; const int inf = 0x3f3f3f3f; const…
中文题面,注意st是不可以放到dp里面的,否则每次solve都要清零 注意状态的转移要st&&i==0,因为子结构也可能是st(当高位取0时) 而st是必然合法的 #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) using namespace std; const int maxn = 20; typedef long long ll; int a[maxn]; ll l,…
思路: f[i][j]表示i位数乘积为j的方案数 j的取值最多5000多种,那就开个map存一下好了 f[i][mp[k*rec[j]]]+=f[i-1][j]; //By SiriusRen #include <map> #include <cstdio> using namespace std; #define int long long ],f[][]; map<int,int>mp; void dfs(int x){ if(x>n||mp.find(x)!…
3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f[i][j]\)i位数j个1的方案数..不考虑天际线就是组合数... 比较坑的地方是本题求f要取模\(phi(1e7+7)\),然后它并不是质数... #include <iostream> #include <cstdio> #include <cstring> #inc…
3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2267  Solved: 1040[Submit][Status][Discuss] Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 算是挺简单的数位DP吧,但还是花了好久才弄明白... 又参考了博客:https://blog.csdn.net/sunshinezff/article/details/51049132 先预处理开头是 0/1 的 i 位数中有 j 个1的数的数量,然后按位一边限制大小,一边分成0开头或1开头统计答案. 代码如下: #include<iostream> #include<cst…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 可以枚举 “1的个数是...的数有多少个” ,然后就是用组合数算在多少位里选几个1. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ,N=;//(1e7+7)%9…