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 |
这程序为什么runtime error啊,菜鸟求解释#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int dp[21][801]; int path[21][801]; bool select(int i, int j, int k, int* v) { for (int n = 1; n <= j; n ++){ if (i == path[n][k]) return true; k -= v[path[n][k]]; } return false; } int main() { int n, m; int round = 1; int p[300], d[300], s[300], v[300]; while(true) { scanf("%d %d", &n, &m); if (n == 0 && m == 0) break; memset(dp, -1, sizeof(dp)); memset(path, 0, sizeof(path)); for (int i = 1; i <= n; i ++) { scanf("%d %d", &p[i], &d[i]); s[i] = p[i] + d[i]; v[i] = p[i] - d[i]; } int fix = 20 * m; dp[0][fix] = 0; for (int j = 1; j <= m; j ++){ for (int k = 0; k <= 2 * fix; k ++){ if (dp[j-1][k] >= 0){ for (int i = 1; i <= n; i ++){ if (dp[j][k + v[i]] < dp[j-1][k] + s[i]){ if (!select(i, j, k, v)){ dp[j][k+v[i]] = dp[j-1][k] + s[i]; path[j][k+v[i]] = i; } } } } } } int k; for (k = 0; k <= fix; k ++) if (dp[m][fix + k] >= 0 || dp[m][fix - k] >= 0) break; int re1 = (dp[m][k + fix] > dp[m][fix - k]) ? dp[m][k + fix] : dp[m][fix - k]; int re2 = (dp[m][k + fix] > dp[m][fix - k]) ? k : -k; printf("Jury #%d\n", round ++); printf("Best jury has value %d for prosecution and value %d for defence:\n", (re1 + re2)>>1, (re1 - re2)>>1); int id[300]; int j = m; k = (dp[m][k + fix] > dp[m][fix - k]) ? k + fix : fix - k; for (int i = 0; i < m; i ++){ id[i] = path[j--][k]; k -= v[id[i]]; } sort(id, id + m); for (int i = 0; i < m; i ++) printf(" %d", id[i]); printf("\n\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator