博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC日记——幸运号码 51nod 1043
阅读量:4326 次
发布时间:2019-06-06

本文共 1013 字,大约阅读时间需要 3 分钟。

 

思路:

  传说中的数位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 
#include
#include
using namespace std;#define ri 9005#define mod 1000000007long long n,dp[9005],ans,f[9005];int main(){ scanf("%d",&n),f[0]=1; for(int i=1;i<=9;i++) dp[i]=1,f[i]=1; for(int i=2;i<=n;i++) { for(int j=9*n;j>=1;j--) { long long dpos=0,fpos=0; for(int v=0;v<=9;v++) { if(j-v>=0) { fpos=(fpos+f[j-v])%mod; dpos=(dp[j-v]+dpos)%mod; } else break; } f[j]=fpos,dp[j]=dpos; } } for(int i=1;i<=9*n;i++) ans=(ans+(dp[i]*f[i])%mod)%mod; cout<

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6747025.html

你可能感兴趣的文章
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>
万方数据知识平台 TFHpple +Xpath解析
查看>>
Hive实现oracle的Minus函数
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
RocketMQ配置
查看>>
vs code调试console程序报错--preLaunchTask“build”
查看>>
蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
查看>>
端口号大全
查看>>