1. 程式人生 > >B - Bone Collector (01揹包)

B - Bone Collector (01揹包)

題目:
塗奧最近迷上了吃雞,房間有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

程式碼:

#include <iostream>
#include <cstring>
using namespace std;    
long long dp[1010];
int main()
{
    int t,n,i,s;
    long long w[1010],v[1010];
    cin>>t;
    while(t--)
    {
        memset(dp,0,sizeof(dp));//注意將dp陣列清空 
        cin>>n>>s;
        for(i=0;i<n;i++)
        cin
>>v[i]; for(i=0;i<n;i++) cin>>w[i]; for(i=0;i<n;i++) for(long long j=s;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); cout<<dp[s]<<endl; } return 0; }