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思路,测试几组数据都正确,提交就错误,高手帮忙分析下原因吧。# 高手帮忙分析下: 几组数据测试下来,都正确,提交就WA。 不知道错误在哪里了。 # 思路: R[MAXN][MAXP]做记录。 for (i=1; i<=n; i++) // 记录第i个组设备 for (j=1; j<=MAXP; j++) // 当价格为j时 for (k=1; k<=N[i]; k++) // 对i组中的每一个设备计算带宽 # 代码如下: /* Peking Acm 1018 */ /* 分组背包问题 */ #include "stdio.h" #define MAXN 101 #define MAXM 101 #define MAXP 20000 int N[MAXN]; int B[MAXN][MAXM]; int P[MAXN][MAXM]; int R[MAXN][MAXP]; int main() { int t,n,m; int i,j,k,x; double temp,ans; scanf("%d", &t); while(t--) { /* input */ scanf("%d", &n); for (i=1; i<=n; i++) { scanf("%d", &N[i]); for (j=1; j<=N[i]; j++) scanf("%d %d", &B[i][j], &P[i][j]); } /* initialize */ for (i=0; i<=n; i++) for (j=0; j<=MAXP; j++) R[i][j] = -1; R[0][0] = 10000; /* compute */ for (i=1; i<=n; i++) /* group number */ for (j=1; j<=MAXP; j++) /* prize */ for (k=1; k<=N[i]; k++) /* object in group */ { x = j-P[i][k]; /* 买下此设备,剩下的钱*/ if ( x >= 0 && /* 钱够买此设备 */ R[i-1][x] != -1 ) /* 剩下的钱买其他设备的方案已有*/ { if ( B[i][k] >= R[i-1][x] ) /* 此设备的带宽大于总带宽*/ R[i][j] = R[i-1][x]; /* 则对总带宽无影响*/ else if ( B[i][k] > R[i][j] ) /* 此设备的带宽小于总带宽 && 相对于上一个设备这个设备能得到更高的带宽 */ R[i][j] = B[i][k]; } } /* print answer */ ans = 0.0; for (i=1; i<MAXP; i++) { if (R[n][i] != -1) { temp = (double)R[n][i] / (double)i; if (temp > ans) ans = temp; } } printf("%.3lf\n", ans); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator