标签:dp
//一个系统需要n个设备,每个设备有不同的生产厂家,不同的厂家的设备的性能和价格不同
//现在问要这个系统的B/P的最大值,B是N个设备性能最差的性能,P是n个设备的价格
//dp[i][j] 表示前i个设备的性能大于等于j的最少价格
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 110 ;
const int inf = 0x7fffffff ;
int dp[maxn][maxn*10] ;
int c[maxn][maxn] ;
int v[maxn][maxn] ;
int len[maxn] ;
int n ;
int main()
{
// freopen("in.txt" ,"r" , stdin) ;
int t ;
scanf("%d" , &t) ;
while(t--)
{
scanf("%d" , &n) ;
int ma = 0 ;
for(int i = 1;i <= n;i++)
{
scanf("%d" , &len[i]) ;
for(int j = 1;j <= len[i] ; j++)
{
scanf("%d%d" , &c[i][j] , &v[i][j]) ;
ma = max(c[i][j] , ma) ;
}
}
memset(dp , 0 , sizeof(dp)) ;
for(int i = 1;i <= n;i++)
{
for(int j = 0 ;j <= ma ;j++)
{
if(dp[i-1][j] == inf)
{
dp[i][j] = inf;
continue ;
}
int mi = inf ;
for(int k = 1;k <= len[i];k++)
if(c[i][k] >= j)
mi = min(v[i][k] , mi) ;
if(mi == inf){dp[i][j] = inf ;continue ;}
dp[i][j] = dp[i-1][j] + mi ;
}
}
double ans = 0 ;
for(int i = 1;i <= ma;i++)
ans = max(ans , (double)i/(double)dp[n][i]) ;
printf("%.3lf\n" , ans) ;
}
return 0 ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj1018Communication System dp
标签:dp
原文地址:http://blog.csdn.net/cq_pf/article/details/47187879