【Aizu 2305】Beautiful Currency
题意
给你n个货币价格,然后通过调整一些货币的大小,使得所有比自己小的货币都是该货币的约数,调整前第 i 货币为a,调整后为b 那么变化率为 ri=|a-b|/a ,总变化率为max(ri)。求最小的总变化率。
分析
DP
状态转移方程 dp[i][k]=min(max(dp[i-1][j], |k-a[i]|/a[i]));
dp[i][k]表示前i个货币调整后,第i个货币为k时,最大的变化率是多少。
因为每个货币都是前面货币的倍数,所以只要它是前一个货币的倍数即可。
我们枚举前一个货币的范围和这个货币的范围,前一个货币范围就是1到2*a[i-1]-1,因为变化率如果为1,那肯定不如把所有货币置为1,总变化率更小。而当前货币的范围就是前一个货币的1倍、2倍、... 小于2*a[i]-1。
初始化时,dp[i][j]=1,最大变化率肯定小于1。
最后答案就是max(dp[n][i])了。
要注意的是,开dp数组时要开到200005,因为变化后的最大值接近原来的两倍。
这题网友的方法是二分+dfs搜索,dp是学长给的题解里的方法。
代码
#include<stdio.h>
#include<algorithm>
#include<cmath>
#define F(a,b,c) for(int a=b;a<=c;a+=b) using namespace std; int n,a[]={};
double dp[][],ans=; int main(){
scanf("%d",&n);
F(i,,n) scanf("%d",&a[i]); F(i,,n) F(j,,) dp[i][j]=; F(i,,n)
F(j,,*a[i-]-)
F(k,j,*a[i]-)//每次+j
dp[i][k]=min(dp[i][k],max(dp[i-][j],fabs(k-a[i])/a[i])); F(i,,*a[n]-)
if(ans>dp[n][i])ans=dp[n][i]; printf("%.12lf\n",ans); return ;
}
【Aizu 2305】Beautiful Currency的更多相关文章
- 【Codeforces 300C】Beautiful Numbers
[链接] 我是链接,点我呀:) [题意] 让你找到长度为n的数字 这个数字只由a或者b组成 且这n个数码的和也是由a或者b组成的 求出满足这样要求的数字的个数 [题解] 枚举答案数字中b的个数为y,那 ...
- 【hdu 6351】Beautiful Now
[链接] 我是链接,点我呀:) [题意] 你可以最多交换k次数字. 让你组成一个最大的和一个最小的数字. [题解] 直接写个bfs.求出所有状态的最小交换次数. 但是最大值和最小值分开写. 做最大值的 ...
- 【数位dp】Beautiful Numbers @2018acm上海大都会赛J
目录 Beautiful Numbers PROBLEM 题目描述 输入描述: 输出描述: 输入 输出 MEANING SOLUTION CODE Beautiful Numbers PROBLEM ...
- 【CodeForces 651B】Beautiful Paintings 排序+贪心
题目大意: 给定集合,对于任意一个的排列,记,求. 很明显每次搞出一个长度为的最长上升序列,然后把元素给删掉,答案增加. 直接暴力需要. 但是可以进行优化. 设有个,将个数从小到大排序,记为长度为的数 ...
- 【Aizu - ALDS1_7_A】Rooted Trees(树的表达)
Rooted Trees Descriptions: A graph G = (V, E) is a data structure where V is a finite set of vertice ...
- 【Aizu - 0005 】GCD and LCM
GCD and LCM Descriptions: Write a program which computes the greatest common divisor (GCD) and the l ...
- 【Aizu - ALDS1_1_C】Prime Numbers(素数筛法)
Prime Numbers Descriptions: A prime number is a natural number which has exactly two distinct natur ...
- 【Aizu - 0118】Property Distribution
-->Property Distribution 原文是日语,算了算了,直接上我大中华母语吧 Descriptions: 在H * W的矩形果园里有苹果.梨.蜜柑三种果树, 相邻(上下左右)的 ...
- 【Aizu - 0033】Ball (简单搜索)
-->Ball 原文是日语,这里直接写中文了 Descriptions: 如图所示,容器中间有一枢轴,下方分为两路.容器上方开口,从1到10连续编号的小球从容器开口A放入.通过调整枢轴E的方向, ...
随机推荐
- html5实现微信摇一摇功能
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...
- AC日记——热浪 codevs 1557 (最短路模板题)
1557 热浪 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 德克萨斯纯朴的民眾们这个夏 ...
- 使用List的addAll()方法请判空指针
在写代码的时候经常会用到List,Set的addAll()方法,但是要注意addAll()方法不能传入空指针. package link.mengya.utils; import link.mengy ...
- 转:webRTC的前世今生
https://blog.coding.net/blog/getting-started-with-webrtc
- Android 中JNI创建实例
参考文档: http://blog.sina.com.cn/s/blog_a11f64590101924l.html http://www.cnblogs.com/hoys/archive/2010/ ...
- ajax载入数据是小细节
今天看了一个点子: 在 ajax 导入数据的 div中添加一些样式,比如:我们正紧急抢救 增加趣味性,有解决数据卡壳问题
- iOS中使用RSA对数据进行加密解密
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...
- nodejs 针对 mysql 设计的原型库,支持事务/共享多次/单次查询
//通过this访问内置流程对象, 在每个流程中都能使用 //this.conn => mysql-connection //this.results => 整个流程数已经返回的值 //t ...
- Linux 信号概念
程序在执行的时候,几乎任何时刻都会反生事件. 信号通常用来向一个进程通知事件. 信号是不可提前预知的,所以信号是异步的. 信号随时都可能发生,接收信号的进程也可以没有控制权. 每个信号名都以SIG开头 ...
- U3D临时文件GICache巨大
C:\Users\asus\AppData\LocalLow\Unity\Caches\GiCache 看名字似乎是全局光的缓存,可以通过Edit - Preference - GI Cache,选中 ...