leetcode 1029. Two City Scheduling
题意:[n][2]的数组,[i][0]表示第i个人去A的距离,[i][1]表示第i个人去B的距离,求最后位置都有一半的人,最少的距离。
思路:dp[i][j]表示前i个人,j个人去A,剩下的人去B的最小距离。
dp[i][j]=min(dp[i][j],dp[i-1][j-1]+[i][0]);//i -> A
dp[i][j]=min(dp[i][j],dp[i-1][j]+[i][1]);//i -> B
最终要求的值就是dp[n][n/2];
代码:写的有点丑,见谅。
class Solution {
public:
int twoCitySchedCost(vector<vector<int>>& costs) {
int n = costs.size();
vector<vector<int>> dp(n+1,vector<int>(n+1,INT_MAX));
dp[0][0] = 0;
for (int i = 1; i <= n; i++)
{
vector<int> tmp = costs[i-1];
for (int j = 0; j <= i; j++)
{
if (j-1>=0 && j-1 <= i-1)
dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + tmp[0]);
if (j<=i-1)
dp[i][j] = min(dp[i][j], dp[i - 1][j] + tmp[1]);
//cout << dp[i][j] << '\t';
}
//cout << endl;
}
//int ans = INT_MAX;
//for (int i = 0; i < n; i++)
// ans = min(ans, dp[n][n/2]);
return dp[n][n/2];
}
};