BZOJ3233:[AHOI2013]找硬币(DP)

时间:2022-08-31 19:26:39

Description

小蛇是金融部部长。最近她决定制造一系列新的货币。假设她要制造的货币的面值为x1,x2,x3… 那么x1必须为1,xb必须为xa的正整数倍(b>a)。例如 1,5,125,250就是一组合法的硬币序列,而1,5,100,125就不是。不知从哪一天开始,可爱的蛇爱上了一种萌物——兔纸!从此,小蛇便走上了遇上兔纸娃娃就买的不归路。某天,小蛇看到了N只可爱的兔纸,假设这N 只兔纸的价钱分别是a1,a2…aN。现在小蛇想知道,在哪一组合法的硬币序列下,买这N只兔纸所需要的硬币数最少。买兔纸时不能找零。

Input

第一行,一个整数N,表示兔纸的个数
第二行,N个用空格隔开的整数,分别为N只兔纸的价钱

Output

一行,一个整数,表示最少付的钱币数。

Sample Input

2
25 102

Sample Output

4

HINT

样例解释:共有两只兔纸,价钱分别为25和102。现在小蛇构造1,25,100这样一组硬币序列,那么付第一只兔纸只需要一个面值为25的硬币,第二只兔纸需要一个面值为100的硬币和两个面值为1的硬币,总共两只兔纸需要付4个硬币。这也是所有方案中最少所需要付的硬币数。
1<=N<=50, 1<=ai<=100,000

Solution

因为选的序列是倍数的原因,所以我们可以得到一个贪心:尽可能选大的。

也就是我们从大到小确定面额,如果当前确定的面额为$x$,那么所有兔子剩下需要付的就是$a[i]\% x$。

设$f[i]$表示当前最小面值为$i$时的最少付钱次数。

初始化$f[i]=\sum_{j=1}^na[j]/i$。

设$p$为$f[i]$的一个质因数

转移$f[i/p]=min(f[i/p],f[i]+\sum_{j=1}^{n} a[j]\% i/(i/p))$

并且你需要一个线筛来快速找出一个数的所有质因数。

为什么这么转移懒得写了,反正就是基于贪心的思想应该并不难理解QAQ

我:为啥这个初始化不上取整啊……难不成钱不够兔子还给你抹个零……
$sugar$:你别说还真的抹个零,因为零头在后面$DP$会付掉的……

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#define N (100009)
using namespace std; int n,cnt,maxn,a[N],prime[N],d[N],f[N]; void Euler()
{
for (int i=; i<=maxn; ++i)
{
if (!d[i]) {prime[++cnt]=i; d[i]=i;}
for (int j=; j<=cnt && i*prime[j]<=maxn; ++j)
{
d[i*prime[j]]=prime[j];
if (i%prime[j]==) break;
}
}
} int main()
{
scanf("%d",&n);
for (int i=; i<=n; ++i)
scanf("%d",&a[i]), maxn=max(maxn,a[i]);
Euler();
memset(f,0x7f,sizeof(f));
for (int i=maxn; i>=; --i)
{
int sum=;
for (int j=; j<=n; ++j)
sum+=a[j]/i;
f[i]=min(f[i],sum);
int x=i;
while (x>)
{
int p=d[x],sig=;
for (int j=; j<=n; ++j)
sig+=a[j]%i/(i/p);
f[i/p]=min(f[i/p],f[i]+sig);
while (x%p==) x/=p;
}
}
printf("%d\n",f[]);
}

BZOJ3233:[AHOI2013]找硬币(DP)的更多相关文章

  1. &lbrack;Bzoj3233&rsqb;&lbrack;Ahoi2013&rsqb;找硬币&lbrack;基础DP&rsqb;

    3233: [Ahoi2013]找硬币 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 482[Submit][Status][ ...

  2. BZOJ 3233&colon; &lbrack;Ahoi2013&rsqb;找硬币&lpar; dp &rpar;

    dp(x)表示最大面值为x时需要的最少硬币数. 枚举x的质因数p,  dp(x) = min( dp(x/p) - (p-1) * sigma[a[i]/x] ). ----------------- ...

  3. &lbrack;bzoj3233&rsqb; &lbrack;Ahoi2013&rsqb;找硬币

    一开始没什么思路...后来想到确定最大硬币面值就知道其他面值能取多少了..而且结果是可以由较小的面值转移过来的. f[i]表示最大面值为i时的最小硬币数.a[i]表示第i个物品的价钱. f[i]=mi ...

  4. &lbrack;AHOI2013&rsqb;找硬币(搜索)

    [Ahoi2013]找硬币 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 348  Solved: 114[Submit][Status] Descri ...

  5. BZOJ 3233&colon; &lbrack;Ahoi2013&rsqb;找硬币

    BZOJ 3233: [Ahoi2013]找硬币 标签(空格分隔): OI-BZOJ OI-DP Time Limit: 10 Sec Memory Limit: 64 MB Description ...

  6. 【bzoj 3233】&lbrack;Ahoi2013&rsqb;找硬币 ——搜索

    Description 小蛇是金融部部长.最近她决定制造一系列新的货币.假设她要制造的货币的面值为x1,x2,x3… 那么x1必须为1,xb必须为xa的正整数倍(b>a).例如 1,5,125, ...

  7. 【BZOJ 3233】 &lbrack;Ahoi2013&rsqb;找硬币

    [题目 描述] 小蛇是金融部部长. 最近她决定制造一系列新的货币. 假设她要制造的货币 的面值为 x1, x2, x3… 那么 x1 必须为 1, xb 必须为 xa 的正整数倍(b>a). 例 ...

  8. 【bzoj3233】【ahoi2013】找硬币

    题意: 求确定n种货币面额x1..xn满足 x1=1 且xi为xj的整数倍(i>j) 给定n个物品价格ai 求使用上面货币最少需要硬币数(不能找零) 题解: 动态规划 听说网上的题解都是搜索的做 ...

  9. BZOJ3233【AHOI2013】找硬币

    题面 题解 最优肯定是尽可能用大面值硬币 设$f[i]$表示最小面值为$i$时的最小答案 则:(令$p$是$i$的最小质因子) $$ f[\frac ip]=min(f[\frac ip], f[i] ...

随机推荐

  1. flexbox 的相关属性的运用

    若是用 JS 动态的添加 html 元素到有 flexbox 属性的元素上,那么渲染的时候 可能会有问题. CSS 代码如下: .display-flex { /* OLD: Safari, iOS, ...

  2. 使用AssetsLibrary&period;Framework创建多图片选择控制器&lpar;翻译&rpar;

    系统的UIImagePickerController只能让用户选择单图片,而一般情况下,我们需要上传多张图片,这时应该可以同时选择多张图片,否则用户体验会很差.因此多图片选择器就诞生了. 在类库中,苹 ...

  3. Yii 1&period;1 URL两个笔记 同时支持PATH于GET路由和隐藏index&period;php

    同时支持PATH于GET格式路由(修改框架文件 简直坑) framework/web/CUrlManager.php parseUrl方法 第一行判断修改成 if($this->getUrlFo ...

  4. Ubuntu下codeblocks汉化

    code::blocks是一个十分好用编辑环境,一个在手,无所不能,为了更好的支持中文,我列出了汉化的方法: 1下载中文汉化包:http://pan.baidu.com/s/1hqvNZbI 2.解压 ...

  5. Redis未授权访问缺陷让服务器沦为肉鸡

    朋友的一个项目说接到阿里云的告警,提示服务器已沦为肉鸡,网络带宽被大量占用,网站访问很慢,通过SSH远程管理服务器还频繁断开链接.朋友不知如何下手,便邀请我帮忙处理. 阿里云的安全告警邮件内容: 在没 ...

  6. 什么时候使用&OpenCurlyDoubleQuote;RCC&lowbar;APBXPeriph&lowbar;AFIO”

    什么时候需要开启复用时钟: (1)使用EXTI (2)重映射(用到外设的重映射功能时才需要使能AFIO的时钟) 举例:重映射USART2 USART2的TX/RX在PA.2/3.但是,PA.2已经被T ...

  7. FtpWebRequest&period;UsePassive属性:设置FTP工作模式

    默认值:true,被动模式 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路. 当需要传送数据时, 服务器在命令链路上用PASV ...

  8. JavaSE基础知识(3)—流程控制结构

    一.顺序结构 1.说明 程序从上往下依次执行,中间没有任何跳转或选择2.特点 变量必须遵循 “前向引用” (局部变量必须先声明.赋值,然后再使用!) 二.分支结构(条件) 1.说明 程序从两条或多条路 ...

  9. BZOJ2006&lbrack;NOI2010&rsqb;超级钢琴——堆&plus;主席树

    题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中 ...

  10. 在 Linux 下用 grep 时高亮显示匹配的部分

    用 grep 匹配文件时,显示结果黑压压的一片执行一下这条命令,重新 grep 试试看export GREP_OPTIONS='--color=auto'好看多了,不是吗?你可以把 export GR ...