poj1018(枚举)
来源:互联网 发布:极度恐慌网络 编辑:程序博客网 时间:2024/05/29 02:49
从DP题集中找的这道题,然后却是用搜索做的,但是在poj上一直超时,优化一直也没有好方法优化,看别人说暴力就可以过……让我很是郁闷╮(╯_╰)╭
搜索做的:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct NODE{int b,p,id;}node[110][110];int min(int a,int b){return a>b?b:a;}int i,j,k,n,nn,m[110];float MAX=0;float bp;NODE x;void dfs(int i,int b,int p){ bp=((float)b/(float)p); if(i==nn+1&&MAX<bp) MAX=bp; for(int ii=1;ii<=m[i];++ii) { int bb=min(node[i][ii].b,b); p+=node[i][ii].p; dfs(i+1,bb,p); p-=node[i][ii].p; }}int main(){scanf("%d",&n);while(n--) { scanf("%d",&nn); for(i=1;i<=nn;++i) { scanf("%d",&m[i]); for(j=1;j<=m[i];++j) scanf("%d %d",&node[i][j].b,&node[i][j].p);for(j=1;j<m[i];++j){for(k=j+1;k<=m[i];++k){if(node[i][j].b>node[i][j].b) {x=node[i][j];node[i][j]=node[i][k];node[i][k]=x;}else if(node[i][j].p>node[i][k].p) {x=node[i][j];node[i][j]=node[i][k];node[i][k]=x;}}} } MAX=0; dfs(1,10000000,0); printf("%.3f\n",MAX); }return 0;}
直接暴力枚举的……:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct NODE{int b,p,id;}node[110][110];int min(int a,int b){return a>b?b:a;}int max(int a,int b){return a>b?a:b;}float max(float a,float b){return a>b?a:b;}int maxb[110],minb[110];int i,j,k,n,nn,m[110];int s,e;int find(int b){int ret=0;for(int i=1;i<=nn;++i){int minp=0x3f3f3f3f;for(int j=1;j<=m[i];++j)if(node[i][j].b>=b) minp=min(minp,node[i][j].p);ret+=minp;}return ret;}void work(){for(int i=1;i<=nn;++i){minb[i]=maxb[i]=node[i][1].b;for(int j=2;j<=m[i];++j){maxb[i]=max(maxb[i],node[i][j].b);minb[i]=min(minb[i],node[i][j].b);}}s=minb[1];e=maxb[1];for(int i=2;i<=nn;++i){s=min(s,minb[i]);e=min(e,maxb[i]);}float ans=0;for(int i=s;i<=e;++i){int d=find(i);ans=max(ans,i*1.0/d);}printf("%.3f\n",ans);}int main(){scanf("%d",&n);while(n--) { scanf("%d",&nn); for(i=1;i<=nn;++i) { scanf("%d",&m[i]); for(j=1;j<=m[i];++j) scanf("%d%d",&node[i][j].b,&node[i][j].p); } work(); }return 0;}
0 0
- poj1018 枚举
- poj1018(枚举)
- poj1018 枚举加贪心
- poj1018 枚举+剪枝
- POJ1018:Communication System(枚举+搜索剪枝)
- POJ1018《Communication System》方法:枚举+剪枝
- POJ1018
- poj1018
- poj1018
- poj1018
- poj1018
- poj1018
- poj1018
- poj1018
- poj1018
- poj1018
- POJ1018
- poj1018
- C#网络程序设计1-2:委托实现单线程
- LeetCode Everyday: 347. Top K Frequent Elements
- 2016/5/21 1002. format the book list again~
- Derby安装步骤及使用教程
- 3n+1数列问题 5月22号
- poj1018(枚举)
- 《Python 核心编程》 学习记录
- C# 带权重的随机 与 不带权重的随机
- Linux常用命令--网络命令、关机重启命令
- HDU 5690 (分治 || 循环节)
- C语言函数内static关键字详解
- C#网络程序设计1-3:线程支持
- php错误日志保存
- 最大的数 nyoj 1170