24分求调
查看原帖
24分求调
1635996
Haze_Unpredictable楼主2025/2/2 14:43
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2000;
const int MAXV = 10000;
int dp[MAXN + 5][MAXV + 5], V[MAXN + 5];
bool pre[MAXN + 5][MAXV + 5], tag[MAXN + 5];
void get_ans(int i, int j) {
    if( i == 0 ) return ;
    if( pre[i][j] ) {
        tag[i] = true;
        get_ans(i-1, j-V[i]);
    }
    else {
        get_ans(i-1, j);
    }
}
int main() {
    int N, M, K; scanf("%d%d", &N, &M);
    for(int i=1;i<=N;i++)
        scanf("%d", &V[i]);
    scanf("%d", &K);
    for(int i=1;i<=N;i++) {
        int k; scanf("%d", &k);
        for(int j=K;j>=V[i];j--) {
            if( dp[i-1][j-V[i]] + k > dp[i-1][j] ) {
                dp[i][j] = dp[i-1][j-V[i]] + k;
                pre[i][j] = true;
            }
            else {
                dp[i][j] = dp[i-1][j];
                pre[i][j] = false;
            }
        }
    }
    get_ans(N, K);
    for(int i=1;i<=N;i++)
        puts(tag[i] ? "1" : "0");
//  printf("%d\n", dp[N][K]);
                         
}

qwq

2025/2/2 14:43
加载中...