【題解】ZeroJudge e721: 108北二7.奪寶奇謀

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e721
【解題想法】DP

#include <iostream>
using namespace std;

int n, a[505], mx, b, dp[505];

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++){
        cin >> b;
        mx = max(mx, b);
        a[b] += b;
    }
    dp[1] = a[1];
    dp[2] = a[2];
    for (int i = 3; i <= mx; i++){
        dp[i] = max(dp[i-3], dp[i-2]) + a[i];
    }
    cout << max(dp[mx-1], dp[mx]) << "\n";
}

Python code (credit: Amy Chou, 9/12/2020)

N = int(input())
val = list(map(int, input().split()))
mn = min(val)
mx = max(val)
a = [0 for i in range(mx+1)]
for v in val:
    a[v] += v

dp = [0 for _ in range(mx+1)]
dp[1] = a[1]
dp[2] = a[2]
for i in range(3, mx+1):
    dp[i] = max(dp[i-3], dp[i-2]) + a[i]
print(max(dp))
分享本文 Share with friends