POJ_1018_(dp)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 28273 | Accepted: 10074 |
Description
By overall bandwidth (B) we mean the minimum of the bandwidths of the chosen devices in the communication system and the total price (P) is the sum of the prices of all chosen devices. Our goal is to choose a manufacturer for each device to maximize B/P.
Input
Output
Sample Input
- 1 3
- 3 100 25 150 35 80 25
- 2 120 80 155 40
- 2 100 100 120 110
Sample Output
- 0.649
- 一道醉人题。。。输出时用printf("%.3f",res); 第一次做wa以为思路出现了偏差。。。然后换了个思路做了一遍。。。两次都卡了
好久。。。还有就是没有数据规模。。。- 自己的思路:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<stdlib.h>
- using namespace std;
- #define N 105
- struct Dev
- {
- int width,price;
- } dev[N][N];
- Dev dp1[N][N];
- double dp2[N][N];
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- int n,num[];
- scanf("%d",&n);
- for(int i=; i<=n; i++)
- {
- scanf("%d",&num[i]);
- for(int j=; j<=num[i]; j++)
- scanf("%d%d",&dev[i][j].width,&dev[i][j].price);
- }
- for(int i=; i<=num[]; i++)
- {
- dp1[][i].price=dev[][i].price;
- dp1[][i].width=dev[][i].width;
- dp2[][i]=dp1[][i].width/(double)dp1[][i].price;
- }
- for(int i=; i<=n; i++)
- for(int j=; j<=num[i]; j++)
- {
- dp2[i][j]=;
- for(int k=; k<=num[i-]; k++)
- {
- int width=min(dp1[i-][k].width,dev[i][j].width);
- int price=dp1[i-][k].price+dev[i][j].price;
- if(width/(double)price-dp2[i][j]>1e-)
- {
- dp2[i][j]=width/(double)price;
- dp1[i][j].width=width;
- dp1[i][j].price=price;
- }
- else if(abs(width/(double)price-dp2[i][j])<1e-)
- {
- if(width>dp1[i][j].width)
- {
- dp1[i][j].width=width;
- dp1[i][j].price=price;
- }
- }
- }
- }
- double res=;
- for(int i=;i<=num[n];i++)
- if(dp2[n][i]>res)
- res=dp2[n][i];
- printf("%.3f\n",res);
- }
- return ;
- }
- 题解思路:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- #define N 105
- #define INF 999999999
- struct Dev
- {
- int width,price;
- } dev[N][N];
- int dp[N][];
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- memset(dp,,sizeof(dp));
- int n,num[];
- scanf("%d",&n);
- for(int i=; i<=n; i++)
- {
- scanf("%d",&num[i]);
- for(int j=; j<=num[i]; j++)
- scanf("%d%d",&dev[i][j].width,&dev[i][j].price);
- }
- for(int i=;i<=n;i++)
- for(int j=;j<=;j++)
- dp[i][j]=INF;
- for(int i=; i<=num[]; i++)
- dp[][dev[][i].width]=min(dev[][i].price,dp[][dev[][i].width]);
- for(int i=; i<=n; i++)
- for(int j=; j<=num[i]; j++)
- {
- for(int k=; k<=; k++)
- {
- if(dp[i-][k]==INF)
- continue;
- if(k<=dev[i][j].width)
- dp[i][k]=min(dp[i-][k]+dev[i][j].price,dp[i][k]);
- else
- dp[i][dev[i][j].width]=min(dp[i-][k]+dev[i][j].price,dp[i][dev[i][j].width]);
- }
- }
- double res=;
- for(int i=; i<=; i++)
- {
- if(dp[n][i]==INF)
- continue;
- //cout<<i/(double)dp[n][i]<<endl;
- if(i/(double)dp[n][i]>res)
- res=i/(double)dp[n][i];
- }
- printf("%.3f\n",res);
- }
- return ;
- }
POJ_1018_(dp)的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
随机推荐
- Ckeditor通过Ajax更新数据
之前在表单中对ckeditor的赋值就直接是 $("#theadEditor").val(result); 而如今我想通过点击不同选项来使用Ajax在后台訪问数据.对ckedito ...
- kvm 安装
一. 虚拟化 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互相不影响,从而 ...
- A星算法(Java实现)
一.适用场景 在一张地图中.绘制从起点移动到终点的最优路径,地图中会有障碍物.必须绕开障碍物. 二.算法思路 1. 回溯法得到路径 (假设有路径)採用"结点与结点的父节点"的关系从 ...
- Android自己定义无下划线ClickableSapn超链接文本样式
近期在做评论的时候须要实现这样的效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamF2X2ltYmE=/font/5a6L5L2T/fontsize/ ...
- easyUI datagrid 前端假分页
datagrid有两种分页方式,真分页和假分页. 所谓真分页,就是真的每次只获取一张分页的数据. 所谓假分页,就是将所有数据全部获取下来,然后利用其分页控件进行分页. 下面具体说说假分页: 1.dat ...
- update-java-alternatives 更改默认Java环境
Ubuntu/debian 更改默认Java环境 我的电脑里安装了两个版本的Java,一个是java-6-sun,还有一个是java-gcjgcj是在JVM非常缓慢的时候诞生的,他可以把Java代码编 ...
- Hadoop安装—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platf
今天在安装hadoop完成测试创建用户目录失败在网上找到了原因记录一下原文地址 http://blog.csdn.net/l1028386804/article/details/51538611 配置 ...
- luogu 3375 【模板】KMP字符串匹配
我太菜了 今天才学会kmp #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- bzoj 1826 缓存交换
题目大意: 一些数,需要将他们依次取入一个集合中 集合的容量有限 若该数已经在集合中则不用再取 每次取的时候可以将集合中与元素替换为另一个,也可以不换,直接加入前提是不超过集合容量 求最后最小的取数次 ...
- 第十三周 Leetcode 363. Max Sum of Rectangle No Larger Than K(HARD)
Leetcode363 思路: 一种naive的算法就是枚举每个矩形块, 时间复杂度为O((mn)^2), 可以做少许优化时间复杂度可以降低到O(mnnlogm), 其中m为行数, n为列数. 先求出 ...