Hangdian 2602 (0/1 backpack + rolling array)

1. There is a problem with initialization.

memset(dp,0,sizeof(dp));//可以
memset(dp,0,v);//不行
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
const int MAX = 1015;
#define MAX_(a,b) (a>b?a:b)
int volume[MAX];
int value[MAX];
int dp[MAX];
int main()
{
    
    
    int n,v;
    int t;
    scanf("%d",&t);
    while(t--)
    {
    
    
        cin>>n>>v;
        memset(dp,0,sizeof(dp));
        for(int i=0;i<n;i++)
        {
    
    
            cin>>value[i];
        }
        for(int i=0;i<n;i++)
        {
    
    
            cin>>volume[i];
        }
        for(int i=0;i<n;i++)
        {
    
    
            for(int j=v;j>=volume[i];j--)
            {
    
    
                dp[j]=MAX_(dp[j],dp[j-volume[i]]+value[i]);
            }
        }
        cout<<dp[v]<<endl;
        //memset(dp,0,v);
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/mingjiweixiao/article/details/114706605