20181031noip模拟赛T2

思路:
这道题是个图论抽象的题目……
考场上想到了没写对……
我们发现,f函数转移的方式有两种,要么是代价10的+1,要么是代价1的乘一个质因数
那么我们就可以将这个抽象为一张图
每个i向每个i+1连一条边权为10的边
每个i向每个i*质因子[j]连一条边权为1的边
跑最短路即可
跑完最短路就是状压搜索
加上最优化剪枝和记忆化剪枝即可
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define rii register int i
#define rij register int j
#define int long long
using namespace std;
int k,dp[];
int ans,sl,ss[],sk,s[],minx,head[],cnt,jl[];
int fin=,dis[];
struct uio{
int nxt,to,val;
}x[];
void add(int from,int to,int val)
{
cnt++;
x[cnt].to=to;
x[cnt].val=val;
x[cnt].nxt=head[from];
head[from]=cnt;
}
//void dfs(int p,int q,int dj,int sd)
//{
// if(sd>100)
// {
// return;
// }
// if(dj>ans)
// {
// return;
// }
// if(q==0)
// {
// ans=min(ans,dj);
// return;
// }
// dfs(p,(q+1)%p,dj+10,sd+1);
// for(rii=1;i<=sl;i++)
// {
// dfs(p,(q*s[i])%p,dj+1,sd+1);
// }
//}
void djstl(int wz)
{
for(rii=head[wz];i!=;i=x[i].nxt)
{
if(dis[x[i].to]>dis[wz]+x[i].val)
{
dis[x[i].to]=dis[wz]+x[i].val;
djstl(x[i].to);
}
}
}
void cf(int val)
{
cnt=;
memset(head,,sizeof(head));
sl=;
for(rii=;i<=val;i++)
{
if(val%i==)
{
val/=i;
if(s[sl]!=i)
{
sl++;
s[sl]=i;
i--;
}
}
if(val==)
{
return;
}
}
}
int f(int val)
{
cnt=;
memset(x,,sizeof(x));
memset(head,,sizeof());
memset(dis,0x3f,sizeof(dis));
int p=,q=,ltt=val;
while(ltt>)
{
p+=ltt%;
ltt/=;
}
p+=;
ltt=val;
while(ltt>)
{
q*=ltt%;
ltt/=;
}
cf(val);
q+=;
q%=p;
for(rii=;i<p;i++)
{
for(rij=;j<=sl;j++)
{
add(i,i*s[j]%p,);
}
add(i,(i+)%p,);
}
dis[q]=;
djstl(q);
return dis[];
}
void cfk(int val)
{
sk=;
for(rii=;i<=val;i++)
{
if(val%i==)
{
val/=i;
if(ss[sk]!=i)
{
sk++;
ss[sk]=i;
i--;
}
}
if(val==)
{
return;
}
}
}
inline int gtv(int v)
{
int kkk=,cnt=;
while(v!=)
{
cnt++;
if(v%==)
{
kkk*=ss[cnt];
}
v/=;
}
return kkk;
}
void kfs(int zt,int dj)
{
if(dp[zt]>dj)
{
dp[zt]=dj;
}
else
{
return;
}
if(dj>=fin)
{
return;
}
if(dj<fin&&zt==(<<sk)-)
{
fin=dj;
return;
}
for(rii=;i<=(<<sk)-;i++)
{
if((zt&i)==)
{
kfs(zt|i,dj+f(gtv(i)));
}
}
}
signed main()
{
freopen("k.in","r",stdin);
freopen("k.out","w",stdout);
memset(dp,0x3f,sizeof(dp));
cin>>k;
cfk(k);
if(sk==)
{
cout<<f(k);
return ;
}
fin=f(k);
kfs(,);
cout<<fin;
}
20181031noip模拟赛T2的更多相关文章
- 模拟赛T2 交换 解题报告
模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...
- 20161003 NOIP 模拟赛 T2 解题报告
Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- 20180530模拟赛T2——绀碧之棺
题目背景 qiancl 得到了一张藏宝图,上面写了一道谜题. 题目描述 定义\(F(n)\)为 n 在十进制下各个数位的平方和,求区间\([a,b]\)中有多少\(n\)满足\(k\times F(n ...
- 20180519模拟赛T2——pretty
[问题描述] 小美今天对于数列很有兴趣.小美打算找出一些漂亮的序列.一个漂亮的序列的限制如下: 长度为 n ,而且数列里只包含 [1,n] 的整数. 要不是不降的序列就是不升的序列. 小美想知道有多少 ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- 5.12 省选模拟赛 T2 贪心 dp 搜索 差分
LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...
- 20161023 NOIP 模拟赛 T2 解题报告
Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
随机推荐
- C++学习笔记(2)----类模板和友元
当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定 ...
- 需求分析之WBS
我们的产品就是当你把废旧的塑料瓶和电池投入回收箱中会产生能量,那么这能量可以干嘛呢那就通过我们的APP进行扫码记录所产生的能量这写能量可以在我们的APP的换吧中进行兑换用户所需要的东西比如:共享单车的 ...
- HTML5-入门。
什么是HTML5? HTML5是超文本语言,不是编程语言,html5是html语言的最新版本,需要注意浏览器的兼容性问题. HTML5技术一般是指的是HTML5.CSS3.JavaScript三种技术 ...
- winform基础控件-例子学习
1.如图实现整数计算器 ComboBox控件: Items属性:添加集合中的项. this.comoper.Items.AddRange(new object[] { "+", & ...
- GOOGLE高级搜索技巧
前记: 我是完整的看完了.内容有点乱啊,自己没有时间整理,先放在自己的印象笔记里了.... 二,GOOGLE特色 GOOGLE支持多达132种语言,包括简体中文和繁体中文: GOOGLE网站只提 ...
- MySQL经典错误
本文目录: Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)Top 2:(主从复制报错类型)Top 3:MySQL安装过程中的报错Top 4:数 ...
- javascript animation lib greensock gsap介绍
一般前台做动画有以下几种方式: 1. 简单的css transition动画; 2. css animation动画 3. javascript库动画 一般来说css html5动画只适用于简单的形变 ...
- java字节码文件指令集
网上找的没有指令码这列 自己把它加上 更方便查阅 指令从0x00-0xc9 没有0xba 常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null nu ...
- August 05th 2017 Week 31st Saturday
All endings are beginnings, we just don't know it at the time. 所有的结局都是新的开始,只是当时我们不知道而已. Several mont ...
- python取当前时间前后一定间隔的时间点
当前时间 datetime.datetime.now() 时间间隔 datetime.timedelta(参数=数值) #参数:weeks,days,hours,minutes,seconds,mic ...