您的位置:首页 > 其它

poj 1018 DP

2013-11-05 22:45 281 查看
AC代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int dp[101][10001];

int main(){
int T, N;
int bandwidth[101], price[101];
int number, max_band;

cin >> T;
while( T-- ){

cin >> N;
memset( dp, -1, sizeof( dp ) );
max_band = 0;
for( int i = 1; i <= N; i++ ){
cin >> number;
for( int im = 0; im < number; im++ ){
cin >> bandwidth[im] >> price[im];
max_band = max( bandwidth[im], max_band );
}

if( i == 1 ){
dp[i-1][max_band] = 0;
}

for( int j = 1; j <= max_band; j++ ){
if( dp[i-1][j] == -1 ){
continue;
}
for( int k = 0; k < number; k++ ){
int temp = min( bandwidth[k], j );
if( dp[i][temp] != -1 ){
dp[i][temp] = min( dp[i][temp], dp[i-1][j] + price[k] );
}else{
dp[i][temp] = dp[i-1][j] + price[k];
}
}
}
}
double ans = 0;
for( int i = max_band; i >= 1; i-- ){
if( dp
[i] != -1 ){
double temp = 1.0 * i / dp
[i];
//				if (temp > ans) {
//                  ans = temp;
//            }
ans = max( ans, temp );
}
}
printf( "%.3lf\n", ans );
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: