dp[i][j]:前i个人中有j个人选数学的最大分数。 for(int i = 1; i <= 40; ++i) { dp[i][0] = dp[i-1][0] + b[i]; for(int j = max(1, i-20); j <= min(i, 20); ++j) { dp[i][j] = max(dp[i-1][j-1] + a[i], dp[i-1][j] + b[i]) } } dp[40][20]就是结果。