1.构树
class Solution {
public:
int min3(int a,int b,int c){
return min(min(a,b),c);
}
int minCost(vector<vector<int>>& costs){
if(costs.size()==0) return 0;
if(costs.size()==1) {
return min3(costs[0][0],costs[0][1],costs[0][2]);
}
vector<int>m;
m ={costs[0][0],costs[0][1],costs[0][2]};
for(int i=1;i<costs.size();i++){
int minA = min(m[1],m[2])+costs[i][0];
int minB = min(m[0],m[2])+costs[i][1];
int minC = min(m[0],m[1])+costs[i][2];
m={minA,minB,minC};
}
return min3(m[0],m[1],m[2]);
}
};
2.动态规划
class Solution {
public:
int minCost(vector<vector<int>>& costs){
int m=costs.size();
if(m==0) return 0;
vector<vector<int>> dp(m+1,vector<int>(3,0));
for(int i=1;i<=m;i++){
dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i-1][0];
dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i-1][1];
dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i-1][2];
}
return min(dp[m][0],min(dp[m][1],dp[m][2]));
}
};