这个题目一开始不知道如何下手,感觉很像背包,里面有两个变量,一个带宽B,一个价格P,有n个设备,每个设备有k个可选的器材(只需选一个),每个器材都有自己的B和P,

n个设备选n个器材,最终,FB=所有器材里最小的B,FP=总的价格,要使得FB/FP最大

这种题目得先把一个变量给控制起来,或者说枚举其中一个变量之后,再通过dp的方法得到另一个变量的最优值,千万别想一步登天

像这个题目,我们如果先把每个设备对应的器材按价格升序排序,然后我枚举可能的FB,对于每个设备,我从前往后扫,一旦扫到了B>=FB(合法数据),就停止,取该值,最后扫完整个n个设备,得到的值必定是我枚举 的FB对应的最大FB/FP,这个显而易见嘛。。因为数据量不大,所以可以用。当然我算了下峰值的复杂度可以达到10的8次方,但是其实达不到,其中很难每个循环都运行完。

其实这样看来倒不像DP了,其实是暴力枚举了

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6. using namespace std;
  7. struct node
  8. {
  9. int b,v;
  10. bool operator < (const node&rhs) const{
  11. return v<rhs.v;
  12. }
  13. };
  14. vector<node>G[110];
  15. int B[10010];
  16. int n,cnt;
  17. int main()
  18. {
  19. int t;
  20. scanf("%d",&t);
  21. while (t--)
  22. {
  23. cnt=0;
  24. scanf("%d",&n);
  25. for (int i=0;i<=n;i++) G[i].clear();
  26. for (int i=1;i<=n;i++){
  27. int k,a,b;
  28. scanf("%d",&k);
  29. while (k--){
  30. scanf("%d%d",&a,&b);
  31. B[cnt++]=a;
  32. G[i].push_back((node){a,b});
  33. }
  34. sort(G[i].begin(),G[i].end());
  35. }
  36. sort(B,B+cnt);
  37. int m=0;
  38. for (int i=1;i<cnt;i++){
  39. if (B[i]!=B[i-1]) B[++m]=B[i];
  40. }
  41. double ans=0.0;
  42. for (int i=0;i<=m;i++){
  43. bool flag=1;
  44. double sum=0;
  45. for (int j=1;j<=n && flag;j++){
  46. int r=G[j].size();
  47. for (int k=0;k<r;k++){
  48. if (G[j][k].b>=B[i]){
  49. sum+=(double)G[j][k].v;
  50. break;
  51. }
  52. if (k==r-1 && G[j][k].b<B[i])flag=0;
  53. }
  54. }
  55. if (!flag) continue;
  56. ans=max(ans,(double)B[i]*1.0/sum);
  57. }
  58. printf("%.3f\n",ans);
  59. }
  60. return 0;
  61. }

  

ZOJ 1409 communication system 双变量型的DP的更多相关文章

  1. zoj 1409 Communication System

    /*如果要一个物体的多种属性,最好用结构体,不要用二维数组或者多维数组.用多维数组进行关键字排序很不稳定 */ /*给每个设备的所有价格排序,每个设备选取恰好比已知带宽大的价格(这个时候的比例最大) ...

  2. 《BI那点儿事》双变量的相关分析——相关系数

    例如,“三国人物是否智力越高,政治就越高”,或是“是否武力越高,统率也越高:准备数据分析环境: SELECT * FROM FactSanguo11 WHERE 姓名 IN ( N'荀彧', N'荀攸 ...

  3. Communication System(dp)

    Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25006 Accepted: 8925 ...

  4. poj 1018 Communication System

    点击打开链接 Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21007   Acc ...

  5. poj 1018 Communication System 枚举 VS 贪心

    Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21631   Accepted:  ...

  6. 双T型陷波滤波器

    有时,我们需要设计个滤波器滤除特定一个频率的噪音.这时就需要陷波滤波器了. 陷波器是带阻滤波器的一种,带阻滤波器的滤除频率有一定宽度,而陷波就是对某一个频率噪音的滤除. 双T型陷波滤波器应该是最常见的 ...

  7. POJ 1018 Communication System(贪心)

    Description We have received an order from Pizoor Communications Inc. for a special communication sy ...

  8. F - Communication System

    We have received an order from Pizoor Communications Inc. for a special communication system. The sy ...

  9. POJ 1018 Communication System (动态规划)

    We have received an order from Pizoor Communications Inc. for a special communication system. The sy ...

随机推荐

  1. 【剑指Offer面试编程题】题目1352:和为S的两个数字--九度OJ

    题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输入: 每个测试案例包括两行: 第一行包含一个整数n和k, ...

  2. IDEA JSP中报错cannot resolve method println的解决方案

    原因是没有导入Tomcat 库, 在 Project structure 添加

  3. Django 3.0的新功能

    谷歌翻译的,我修正并且添加了一些内容.凑合看吧. MariaDB的支持 Django现在正式支持MariaDB 10.1和更高版本.有关更多详细信息,请参见MariaDB注释. ASGI支持 Djan ...

  4. 《Netlogo多主体建模入门》笔记4

    4- 从Langton的蚂蚁看Turtle与Patch的交互   这只蚂蚁从10000步开始,就会自发地 “建桥”     Turtle与Patch就好比是,一个方块和一个格子的关系. 一个格子上可以 ...

  5. java小项目之:抽奖系统!java初学者必备(内附源码)

    [Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...

  6. 常用命令提示符(cmd)

    MS-DOS(Microsoft Disk Operation System)命令提示符(cmd) 启动: win+ R 输入cmd回车切换盘符   盘符名称:进入文件夹   cd 文件夹名称进入多级 ...

  7. leetcode743 Network Delay Time

    """ here are N network nodes, labelled 1 to N. Given times, a list of travel times as ...

  8. SciPy 教程

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. python2学习------基础语法5(文件操作)

    1.文件内容读取 a.txt teestttttttttttttt teestttttttttttttt teestttttttttttttt teestttttttttttttt teesttttt ...

  10. 环境变量方式使用 Secret【转】

    通过 Volume 使用 Secret,容器必须从文件读取数据,会稍显麻烦,Kubernetes 还支持通过环境变量使用 Secret. Pod 配置文件示例如下: 创建 Pod 并读取 Secret ...