bzoj 3131: [Sdoi2013]淘金
#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]淘金的更多相关文章
- Bzoj 3131 [Sdoi2013]淘金 题解
3131: [Sdoi2013]淘金 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 733 Solved: 363[Submit][Status][ ...
- bzoj 3131 [Sdoi2013]淘金(数位DP+优先队列)
Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹 ...
- BZOJ 3131 [SDOI2013]淘金 - 数位DP
传送门 Solution 这道数位$DP$看的我很懵逼啊... 首先我们肯定要先预处理出 $12$位乘起来的所有的可能情况, 记录入数组 $b$, 发现个数并不多, 仅$1e4$不到. 然后我们考虑算 ...
- bzoj 3131 [Sdoi2013]淘金(数位dp)
题目描述 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹过,金子的位置发生了 ...
- [Bzoj3131][Sdoi2013]淘金(数位dp)(优先队列)
3131: [Sdoi2013]淘金 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 847 Solved: 423[Submit][Status][ ...
- [BZOJ3131] [Sdoi2013]淘金
[BZOJ3131] [Sdoi2013]淘金 Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐 ...
- 题解-SDOI2013 淘金
题面 SDOI2013 淘金 有一个 \(X\).\(Y\) 轴坐标范围为 \(1\sim n\) 的范围的方阵,每个点上有块黄金.一阵风来 \((x,y)\) 上的黄金到了 \((f(x),f(y) ...
- 【bzoj 3131】[Sdoi2013]淘金
Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹 ...
- bzoj千题计划268:bzoj3131: [Sdoi2013]淘金
http://www.lydsy.com/JudgeOnline/problem.php?id=3131 如果已知 s[i]=j 表示有j个<=n数的数码乘积=i 那么就会有 s[a1]*s[a ...
随机推荐
- 添加office权限时找不到ofice,com组件的方法
1.执行 mmc.exe,文件->添加/删除管理单元->可用的管理单元,中选择组件服务->添加->所选单元格 2. 执行dcomcnfg.exe -32,用于64的操作系统
- s事件之event.preventDefault()与event.stopPropagation()的阻止默认事件和阻止事件冒泡的用法
event.preventDefault()用法介绍 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 "submit" ...
- python学习笔记系列----(二)控制流
实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...
- Firefox刷新页面和复选框的奇葩问题
Firefox刷新页面后数据还在,估计很多人都碰到过. 但是有一个奇怪的地方就是复选框,如果你默认是勾选了,然后访问者取消勾选,刷新完之后,还是没有勾选,这是为什么? Firefox奇葩的地方就在于c ...
- 编写高性能Web应用程序的10个技巧
这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...
- 34、JS/AJAX
1)回顾JS中核心内容 2)了解WEB1.0和WEB2.0时代的技术与特点 3)理解AJAX的产生背景.工作原理与特点 4)掌握AJAX常用API及应用 声明:服务端使用Servlet技术 一 ...
- python—面向对象编程
面向对象编程简单来说就是基于对 类 和 对象 的使用,所有的代码都是通过类和对象来实现的编程就是面向对象编程! 面向对象的三大特性:封装.继承.多态 首先创建一个类 #使用class创建一个Schoo ...
- dom4j-1.6.1.jar与dom4j-1.4.jar
今天在上线的项目中遇到一个很奇怪的问题 File file = new File("O:/20160817/91a2cb1c-62eb-4a31-a1f6-3af8ab71782a/adi6 ...
- easyui DataGrid 工具类之 列属性class
public class ColumnVO { /** * 列标题文本 */ private String title; /** * 列字段名称 */ pr ...
- CSS简写指南(转)
高效的css写法中的一条就是使用简写.通过简写可以让你的CSS文件更小,更易读.而了解CSS属性简写也是前端开发工程师的基本功之一.今天我们系统地总结一下CSS属性的缩写. 1.色彩缩写 色彩的缩写最 ...