#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#define ll long long
#define M 40009
#define MO 1000000007
using namespace std;
int a[],tot,K,anss;
ll ans[*M],n,f[][M][],size[M],m;
struct data
{
int x,y;
ll z;
data(int a1,int a2)
{
x=a1;
y=a2;
z=size[x]*size[y];
}
bool operator <(data a1)const
{
return z<a1.z;
}
};
void dfs(int wei,ll a1,int now)
{
if(a1>m)
return;
if(wei==tot)
{
ans[++ans[]]=a1;
return;
}
for(int i=now;i<;i++)
dfs(wei+,a1*i,i);
return;
}
bool cmp(ll a1,ll a2)
{
return a1>a2;
}
int main()
{
scanf("%lld%d",&n,&K);
m=n;
for(;n;n/=)
a[++tot]=n%;
dfs(,,);
sort(ans+,ans+ans[]+);
ans[]=unique(ans+,ans+ans[]+)-ans-;
f[][][]=;
for(int i=;i<tot;i++)
{
for(int j=;j<=ans[];j++)
for(int k=;k<;k++)
if(f[i][j][k])
for(int l=;l<;l++)
{
ll a1=ans[j]*l;
if(a1>ans[ans[]])
continue;
a1=lower_bound(ans+,ans+ans[]+,a1)-ans;
f[i+][a1][(k+l)>a[i+]]+=f[i][j][k];
}
}
for(int i=;i<ans[];i++)
for(int j=;j<tot;j++)
size[i]+=f[j][i][]+f[j][i][];
for(int i=;i<=ans[];i++)
size[i]+=f[tot][i][];
sort(size+,size+ans[]+,cmp);
priority_queue<data> p;
p.push(data(,));
for(;!p.empty();)
{
K--;
data q=p.top();
p.pop();
anss=(anss+q.z)%MO;
if(!K)
break;
if(q.x!=q.y)
{
anss=(anss+q.z)%MO;
K--;
if(!K)
break;
p.push(data(q.x+,q.y));
}
if(q.x==)
p.push(data(q.x,q.y+));
}
printf("%d",anss);
return ;
}

DP求出转移到x坐标的数目。各位数乘积的实际数目少。

bzoj 3131: [Sdoi2013]淘金的更多相关文章

  1. Bzoj 3131 [Sdoi2013]淘金 题解

    3131: [Sdoi2013]淘金 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 733  Solved: 363[Submit][Status][ ...

  2. bzoj 3131 [Sdoi2013]淘金(数位DP+优先队列)

    Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块.    一阵风吹 ...

  3. BZOJ 3131 [SDOI2013]淘金 - 数位DP

    传送门 Solution 这道数位$DP$看的我很懵逼啊... 首先我们肯定要先预处理出 $12$位乘起来的所有的可能情况, 记录入数组 $b$, 发现个数并不多, 仅$1e4$不到. 然后我们考虑算 ...

  4. bzoj 3131 [Sdoi2013]淘金(数位dp)

    题目描述 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹过,金子的位置发生了 ...

  5. [Bzoj3131][Sdoi2013]淘金(数位dp)(优先队列)

    3131: [Sdoi2013]淘金 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 847  Solved: 423[Submit][Status][ ...

  6. [BZOJ3131] [Sdoi2013]淘金

    [BZOJ3131] [Sdoi2013]淘金 Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐 ...

  7. 题解-SDOI2013 淘金

    题面 SDOI2013 淘金 有一个 \(X\).\(Y\) 轴坐标范围为 \(1\sim n\) 的范围的方阵,每个点上有块黄金.一阵风来 \((x,y)\) 上的黄金到了 \((f(x),f(y) ...

  8. 【bzoj 3131】[Sdoi2013]淘金

    Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块.    一阵风吹 ...

  9. bzoj千题计划268:bzoj3131: [Sdoi2013]淘金

    http://www.lydsy.com/JudgeOnline/problem.php?id=3131 如果已知 s[i]=j 表示有j个<=n数的数码乘积=i 那么就会有 s[a1]*s[a ...

随机推荐

  1. 使用Redux管理你的React应用

    因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https://github.com/matthew ...

  2. -XX:+TraceClassLoading 监控类的加载

    -XX:+TraceClassLoading –监控类的加载 •[Loaded java.lang.Object from shared objects file] •[Loaded java.io. ...

  3. Excel应该这么玩——4、命名区域:搞定下拉框

    前三篇都是讲的给Excel元素命名,本篇再介绍一种命名的使用方式:命名区域.区域是多个单元格的集合,可以是单行.单列或者类似表格的单元格矩阵,也可以是不连续的多个单元格,但很少用到.当然,一个单元格也 ...

  4. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  5. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  6. maven常见错误

    摘要: 1.Java-maven异常-cannot be cast to javax.servlet.Filter 报错  tomcat 启动后先将tomcat/lib目录下的jar包全部读入内存,如 ...

  7. 弹窗的封装(css,js) 和弹窗的例子

    //每个弹窗的标识 var x =0; var idzt = new Array(); var Window = function(config){ //ID不重复 idzt[x] = "z ...

  8. Oracle软件开发分析

    软件开发的步骤可大致分为: 1.需求分析 2.系统设计 3.编码实现 4.系统测试 5.运行维护 student class     多对一 sno name age gender cid id  c ...

  9. 用友华表Cell一些用法小结(cs.net版本)

    //从Color类型得到RGB类型,也可以用ColorTranslator.ToOle()方法 public int GetRGBFromColor(Color color) { byte r = c ...

  10. Android系统架构-----Android的系统体系架构

    一.Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图: 这个就是我们Android的整体系统架构图了,我们 ...