1. 程式人生 > 其它 >A - A(01揹包)

A - A(01揹包)

技術標籤:藍橋杯練習題揹包問題演算法c語言

問題描述

塗奧最近迷上了吃雞,房間有n個配件,每個配件有c(c<=1e3)的重量和v(v<=1e3)的價值,哇,塗奧撿了一個2級包,容量為s,所以塗奧最多當多肥的快遞員呢?

Input

輸入的第一行是T, 表示有一共要打T場比賽.
每組資料由三行組成.
第1行包含兩個整數n和s 第2行包含n個整數, 表示每一個配件的價值. 第3行包含n個整數, 表示每個配件的重量.

Output

對每一組資料, 輸出塗奧可以多肥.

Sample Input

1
10 10
1 3 5 7 9 11 13 15 17 19
19 17 15 13 11 9 7 5 3 1

Sample Output

51

題目簡析

01揹包問題

正解

#include<stdio.h>

int v[1001], w[1001], dp[1001];

void init(){
    for(int i = 0; i < 1001; i++){
        v[i] = 0; w[i] = 0; dp[i] = 0;
    }
}

int main(){
    int times;
    scanf("%d", &times);
    while(times--){
        int n, s;
        scanf("%d%d"
, &n, &s); init(); for(int i = 0; i < n; i++) scanf("%d", &v[i]); for(int i = 0; i < n; i++) scanf("%d", &w[i]); for(int i = 0; i < n; i++){ for(int j = s; j >= w[i]; j--){ if
(dp[j] < dp[j - w[i]] + v[i]){ dp[j] = dp[j - w[i]] + v[i]; } } } printf("%d\n", dp[s]); } }