Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โค้ด C++ หากำไรสูงสุดจากการสร้างบ้าน

โจทย์: มีที่ดิน n แปลง สูงสุด h ชั้น กำไร = k² สำหรับบ้านสูง k มีข้อจำกัด m โซน: บ้านสูงสุดในช่วง li ถึง ri ต้อง ≤ xi หากกำไรสูงสุด

Input: n=3, h=3, T=[[1,1,1],[2,2,3],[3,3,2]] → Output: 14 (ความสูง [1,3,2] → 1²+3²+2²=14)

ขั้นตอนแก้

heights := array of n filled with h
for each restriction (l,r,x):
    for i := l-1 to r-1:
        heights[i] = min(heights[i], x)
ans := sum of heights[i]²
return ans

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;
int solve(int n, int h, vector<vector<int>> T) {
    int m = T.size();
    vector<int> heights(n, h);
    for (int i = 0; i < m; i++) {
        int l = T[i][0], r = T[i][1], h = T[i][2];
        for (int i = l-1; i < r; i++)
            heights[i] = min(heights[i], h);
    }
    int ans = 0;
    for (int i = 0; i < n; i++) ans += heights[i] * heights[i];
    return ans;
}
int main() {
    int n=3, h=3;
    vector<vector<int>> T = {{1,1,1},{2,2,3},{3,3,2}};
    cout << solve(n,h,T) << endl;
}

Input

3, 3, {{1,1,1},{2,2,3},{3,3,2}}

Output

14