给墙壁刷油漆

给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time ,分别表示给 n 堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠:

一位需要 付费 的油漆匠,刷第 i 堵墙需要花费 time[i] 单位的时间,开销为 cost[i] 单位的钱。
一位 免费 的油漆匠,刷 任意 一堵墙的时间为 1 单位,开销为 0 。但是必须在付费油漆匠 工作 时,免费油漆匠才会工作。
请你返回刷完 n 堵墙最少开销为多少

1. 动态规划

class Solution {
public:
    int paintWalls(vector<int>& cost, vector<int>& time) {
        int n = cost.size();
        vector<int> dp(n+1,INT_MAX/2);
        dp[0] = 0;
        for(int i=0;i<n;i++){//枚举硬币
            for(int j=n;j;j--){  //由后往前,每个硬币只枚举一次
                dp[j] = min(dp[j],dp[max(j-time[i]-1,0)] + cost[i]);
            }
        }
        return dp[n];
    }
};
posted @ 2023-06-21 01:47  失控D大白兔  阅读(3)  评论(0编辑  收藏  举报