#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. 双向循环链表的Java版本实现

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

  2. CentOS7安装Apache2.4+PHP5.6

    linux系统CentOS7 先下载Apache需要依赖的软件 1.APR 下载地址http://apr.apache.org/download.cgi wget下载路径http://mirror.b ...

  3. [windows API]获取当前系统图标,文字大小

     取DPI 缩放比例 HWND wnd = ::GetDesktopWindow(); dbg_print("desktopwnd:0x%X\n",wnd); HDC dc = G ...

  4. winform的常用公共控件和常用属性

    我们在学位winform的控件和属性的时候要学会赋值取值还有改值 公共控件: 1,Button(按钮): Enabled :是否可用 Visible:是否可见 2,CheckBox(多选项) Chec ...

  5. ArcGIS Javascript地图上添加json数据格式的点

    /** * 显示地图点. * json的格式[{"name":"name1","x":"x1","y" ...

  6. [问题2014A05] 解答

    [问题2014A05]  解答 (1) 将矩阵 \(A\) 分解为两个矩阵的乘积: \[A=\begin{bmatrix} 1 & 1 & \cdots & 1 & 1 ...

  7. 通过Mac远程调试iPhone/iPad上的网页(转)

    我们知道在 Mac/PC 上的浏览器都有 Web 检查器这类的工具(如最著名的 Firebug)对前端开发进行调试,而在 iPhone/iPad 由于限于屏幕的大小和触摸屏的使用习惯,直接对网页调试非 ...

  8. excel如何用公式判断单元格的值是否为数字、英文、中文,以及相应的计数

    一.excel如何用公式判断单元格的值是否为数字.英文.中文. A列为数据列,B列为判断列=LOOKUP(CODE(ASC(A1)),{48,65,123;"数字","英 ...

  9. Linux设置ssh无密码登陆

    最近在折腾Hadoop,要用到主机间无密码登陆,设置的时候遇到了一些问题,这里记录一下. 假设A需要无密码登陆B. 那么首先需要在A上使用ssh-keygen生成id_rsa.pub的公钥,生成时,一 ...

  10. Oracle Form Data Entry Sample

    I shared a data entry example form here in this post for Oracle Forms beginner developers, so that t ...