[数位dp]CCPC Changchun 2020 D, Meaningless Sequence-Solution
通过打表我们知道,或者是数学直觉(雾?
反正 ,其中 表示 中的 的数量。
知道了这点,我们考虑如何计算这个题目。我们要算 的 的和,因为跟二进制很有关系,所以我们考虑我们现在已经算到了第若干位。
那么现在我们确定的东西就是现在这样:
我们现在 其中一个变量记录我们现在还有多少位 然后感觉就是普通的数位 dp 力。
这题也太 简单 了吧。
#include <bits/stdc++.h>
using namespace std;
template <typename T>inline void read(T& t){t=0; register char ch=getchar(); register int fflag=1;while(!('0'<=ch&&ch<='9')) {if(ch=='-') fflag=-1;ch=getchar();}while(('0'<=ch&&ch<='9')){t=t*10+ch-'0'; ch=getchar();} t*=fflag;}
template <typename T,typename... Args> inline void read(T& t, Args&... args) {read(t);read(args...);}
const int N=3e3+10, inf=0x3f3f3f3f;
typedef long long ll;
string st;
const ll P=1e9+7;
ll dp[N][3],c;
ll dfs(int rem,int equal){
if(rem==0) return 1;
if(dp[rem][equal]!=-1) return dp[rem][equal];
ll &s=dp[rem][equal]; s=0;
if(equal){
s=(s+dfs(rem-1,st[st.size()-rem]=='0'))%P;
if(st[st.size()-rem]=='1') s=(s+dfs(rem-1,1)*c)%P;
}else s=(s+dfs(rem-1,0)+dfs(rem-1,0)*c%P)%P;
return s;
}
int main(){
cin>>st>>c;
memset(dp,-1,sizeof(dp));
cout<<dfs(st.size(),1)<<endl;
return 0;
}
/*
是谁挥霍的时光啊,是谁苦苦的奢望啊
这不是一个问题,也不需要你的回答
No answer.
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具