AC代码
include<algorithm>
using namespace std;
int n, c;
int place[53];
int w[53];
int dp[53][53][2];
int use_w(int i, int j, int a, int b) {
return (place[j] - place[i]) * (w[a] + w[n] - w[b]);
}
int main() {
memset(dp, 0x3f, sizeof(dp));
cin >> n >> c;
int w_;
for (int i = 1; i <= n; i++) {
cin >> place[i] >> w_;
w[i] = w[i - 1] + w_;
}
dp[c][c][0] = dp[c][c][1] = 0;
for (int i = c; i >0; i--) {
for (int j = i+1; j <= n; j++) {
dp[i][j][0] = min(dp[i + 1][j][0] + use_w(i, i + 1, i, j), dp[i + 1][j][1] + use_w(i, j, i, j));
dp[i][j][1] = min(dp[i][j - 1][0] + use_w(i, j, i - 1, j - 1), dp[i][j - 1][1] + use_w(j - 1, j, i - 1, j - 1));
}
}
/*for (int j = c; j <= n; j++)
for (int i = j - 1; i > 0; i--)
{
dp[i][j][0] = min(dp[i + 1][j][0] + use_w(i, i + 1, i, j), dp[i + 1][j][1] + use_w(i, j, i, j));
dp[i][j][1] = min(dp[i][j - 1][0] + use_w(i, j, i - 1, j-1), dp[i][j - 1][1] + use_w(j - 1, j, i - 1, j-1));
}*/
cout << min(dp[1][n][0], dp[1][n][1]) << endl;
system("pause");
return 0;
}