llllmz

导航

46. 携带研究材料(第六期模拟笔试)

#include<stdio.h>
#include<stdlib.h>

int max(int i,int j){
    if(i>j) return i;
    return j;
}

int main(){
    int m,n;
    scanf("%d %d\n",&m,&n);
    int* value=(int*)malloc(sizeof(int)*m);
    int* space=(int*)malloc(sizeof(int)*m);
    for(int i=0;i<m;i++) scanf("%d",&space[i]);
    for(int i=0;i<m;i++) scanf("%d",&value[i]);
    int** dp=(int**)malloc(sizeof(int*)*m);
    for(int i=0;i<m;i++) dp[i]=(int*)malloc(sizeof(int)*(n+1));
    for(int i=0;i<=n;i++) dp[0][i]=0;
    for(int i=0;i<m;i++) dp[i][0]=0;
    for(int i=space[0];i<=n;i++) dp[0][i]=value[0];
    for(int i=1;i<m;i++){
        for(int j=1;j<=n;j++){
           if(space[i]<=j){
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-space[i]]+value[i]);
           }else{
               dp[i][j]=dp[i-1][j];
           }
        }
    }
    printf("%d",dp[m-1][n]);
    return 0;
}

posted on 2024-03-17 20:24  神奇的萝卜丝  阅读(28)  评论(0)    收藏  举报