Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
DP自己都晕了,竟然一次AC。。。整理思路贴代码#include<stdio.h> #define N 110 #define MAX 0x7fff int main() { int casenum; scanf("%d", &casenum); while(casenum --) { int n; /* 设备组数[1, 100] */ int m[N]; /* 每一组设备的个数[1, 100] */ int b[N][N]; /* b[i][j],第i组第j号设备的带宽 */ int p[N][N]; /* p[i][j],第i组第j号设备的费用 */ int f[500]; /* 滚动数组,f[i, j]表示选取前i组设备带宽为j时的最小费用 */ int i, j; int high, low; double maxbp; scanf("%d", &n); high = 0; low = MAX; for(i = 1; i <= n; i ++) { scanf("%d", &m[i]); for(j = 1; j <= m[i]; j ++) { scanf("%d%d", &b[i][j], &p[i][j]); if(b[i][j] > high) high = b[i][j]; if(b[i][j] < low) low = b[i][j]; } } /* high,low记录当前case的带宽取值范围 */ for(j = low; j <= high; j ++) f[j] = MAX; for(i = 1; i <= m[1]; i ++) if(f[b[1][i]] > p[1][i]) f[b[1][i]] = p[1][i]; /* 上面两个循环将f数组初始化为f[1, j] */ for(i = 2; i <= n; i ++) for(j = low; j <= high; j ++) { int k, k1, k2, km; int min1, min2, min; int c1, c2; min1 = min2 = MAX; k1 = k2 = 0; for(k = 1; k <= m[k]; k ++) { if(b[i][k] >= j && p[i][k] < min1) { k1 = k; min1 = p[i][k]; } if(b[i][k] == j && p[i][k] < min2) { k2 = k; min2 = p[i][k]; } } /* k1是b较大p最小,k2是b相同p最小 */ if(k1 && f[j] != MAX) /* k1存在且f[i, j]存在,途径一可行 */ c1 = f[j] + p[i][k1]; else c1 = MAX; min = MAX; km = 0; for(k = j + 1; k <= high; k ++) if(f[k] < min) { km = k; min = f[k]; } /* km是选择前i-1组设备时带宽大于当前带宽j且费用最小的带宽大小 */ if(km && k2) /* 途径二可行 */ c2 = f[km] + p[i][k2]; else c2 = MAX; f[j] = c1 < c2 ? c1 : c2; /* 从两种途径中选取最小的 */ } maxbp = 0; for(j = low; j <= high; j ++) if(f[j] != MAX && (double)j / f[j] > maxbp) maxbp = (double)j/ f[j]; printf("%.3f\n", maxbp); } return 0; } /* f[i][j]表示已选取前i组设备,带宽为j时的最小费用 由f[i - 1][...]转移到f[i][j]有两种途径 一是f[i - 1][j] + min{p[i][k](满足b[i][k] >= j)}(原设备限制带宽为j) 二是min{f[i - 1][t](满足t > j)} + min{p[i][k](满足b[i][k] == j)}(新选取设备限制带宽为j) */ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator