基本思想:
第一时间想到dp,但是发现会爆时间;
最后发现贪心一次就过了。。。特娘的;
具体代码:
class Solution {
public:
int min_Cost(string colors, vector<int>& neededTime) {
vector<vector<int>> dp(2,vector<int>(colors.size(),0));
int cnt=0;
for(int i=1;i<colors.size();i++){
if(colors[i]!=colors[i-1]){
cnt+=min(dp[0][i-1],dp[1][i-1]);
}else{
dp[0][i]=neededTime[i]+min(dp[0][i-1],dp[1][i-1]);
for(int j=i-1;j>=0&&colors[j]==colors[i];j--){
dp[1][i]+=neededTime[j];
}
}
}
cnt+=min(dp[0][colors.size()-1],dp[1][colors.size()-1]);
return cnt;
}
int minCost(string colors, vector<int>& neededTime) {
int cnt=0;
for(int i=0;i<neededTime.size();i++){
int sum=neededTime[i];
int minx=neededTime[i];
while(i+1<neededTime.size()&&colors[i]==colors[i+1]){
sum+=neededTime[i+1];
minx=max(neededTime[i+1],minx);
i++;
}
cnt+=sum-minx;
}
return cnt;
}
};