LC956. Tallest Billboard

你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。

你有一堆可以焊接在一起的钢筋 rods。举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。

返回广告牌的最大可能安装高度。如果没法安装广告牌,请返回 0。

分析:

class Solution {
public:
    int tallestBillboard(vector<int>& rods) {
        int s = accumulate(rods.begin(), rods.end(), 0);
        vector<int> dp(s + 1, -1);
        dp[0] = 0;
        for (int h : rods) {
            auto cur(dp);
            for (int i = 0; i <= s; ++i) {
                if (cur[i] < 0) continue;
                if (i + h <= s) dp[i + h] = max(dp[i + h], cur[i]);
                dp[abs(i - h)] = max(dp[abs(i - h)], cur[i] + min(h, i));
            }
        }
        return dp[0];
    }
};

 

posted @ 2020-03-05 17:32  betaa  阅读(165)  评论(0编辑  收藏  举报