AC日记——幸运号码 51nod 1043
2024-08-25 08:37:03
思路:
传说中的数位dp;
不难发现,n(n<1000) ,那么,n个数的最大和为9*1000=9000;
对于9000*1000的时间范围,我们可以用dp来解决;
dp[i][j],表示第i为数总和为j的号码的个数;
每个dp[i][j]都是dp[i-1][j-v](0<=v<=9) 的总和;
然后按照左边的n和右边的n,分为有前导0,和没有前导0进行dp;
然后输出排列的答案即可;
dp[1000][9000]*2会爆空间,所以我选择压掉i维;
来,上代码:
#include <cstdio>
#include <iostream>
#include <algorithm> using namespace std; #define ri 9005
#define mod 1000000007 long long n,dp[],ans,f[]; int main()
{
scanf("%d",&n),f[]=;
for(int i=;i<=;i++) dp[i]=,f[i]=;
for(int i=;i<=n;i++)
{
for(int j=*n;j>=;j--)
{
long long dpos=,fpos=;
for(int v=;v<=;v++)
{
if(j-v>=)
{
fpos=(fpos+f[j-v])%mod;
dpos=(dp[j-v]+dpos)%mod;
}
else break;
}
f[j]=fpos,dp[j]=dpos;
}
}
for(int i=;i<=*n;i++) ans=(ans+(dp[i]*f[i])%mod)%mod;
cout<<ans;
return ;
}
最新文章
- 基于trie树的具有联想功能的文本编辑器
- 【原创】如何在Android Studio下调试原生安卓Framework层面的源代码
- Qt中数据模块学习
- Android Studio构建系统基础
- jQuery知识点总结(第三天)
- 斑点检测(LoG,DoG)(下)
- bzoj 2761: [JLOI2011]不重复数字
- 2016 - 1 -19 初探NSOperation
- 算法系列5《SSF33》
- BZOJ3122 随机数生成器
- Innodb的启动
- confirm的用法 一般用于按钮操作时确定是否执行
- cocos2d-X-3.X 场景与层
- 024找到二维阵列(keep it up)
- javascript 控制台输出 图片 console.log 真强大 真佩服你们的创造力
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3
- css实现文本缩略显示
- c# linq 汇总
- 关于ArrayList中的iterator返回的事迭代器实例问题。
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力