#40594: 一維DP解


glps1004@gmail.com (Ian)

學校 : 不指定學校
編號 : 272041
來源 : [101.9.186.158]
最後登入時間 :
2024-07-20 16:07:05
e465. 置物櫃分配 -- 2018年10月APCS | From: [101.9.185.185] | 發表日期 : 2024-05-30 10:00

#include <bits/stdc++.h>
using namespace std;
#define N 101
#define MM 200001
int dp[MM]={0};
int main()
{
    int n, M, S;
    scanf("%d %d %d", &M, &S, &n);
    int w[n+1];
    int sum = 0;
    for (int i = 1; i <= n; i++)
    {
         scanf("%d", w+i);
         sum += w[i];
    }
    int limit = M - S;
    for(int i=1; i<=n; i++)
    {
        for(int j=limit; j>=w[i]; j--) //逆著來
        {
            dp[j]=max(dp[j-w[i]]+w[i],dp[j]);
        }
    }
    printf("%d",sum-dp[limit]);
}

 
ZeroJudge Forum