如果你WA on #2 #3 #4 40points
查看原帖
如果你WA on #2 #3 #4 40points
1033360
retamian楼主2023/10/3 15:16

观察两份代码:

A(40points):

for (int p = 1; p < n; p++) {
		for (int i = 1; i<=n; i++) {
			int j = i + p;
			hp[i][j] = hp[i][j - 1] + h[j];
			for (int k = i; k < j; k++) {
				ma[i][j] = max(ma[i][j], ma[i][k] + ma[k + 1][j] + hp[i][j]);
				mi[i][j] = min(mi[i][j], mi[i][k] + mi[k + 1][j] + hp[i][j]);
			}
		}
	}

B(100points):

for (int p = 1; p < n; p++) {
   	for (int i = 1; p+i<n*2; i++) {
   		int j = i + p;
   		hp[i][j] = hp[i][j - 1] + h[j];
   		for (int k = i; k < j; k++) {
   			ma[i][j] = max(ma[i][j], ma[i][k] + ma[k + 1][j] + hp[i][j]);
   			mi[i][j] = min(mi[i][j], mi[i][k] + mi[k + 1][j] + hp[i][j]);
   		}
   	}
   }

循环中止条件应当是p+i<n*2

为什么捏?有大佬解惑咩。

2023/10/3 15:16
加载中...