zoukankan      html  css  js  c++  java
  • 01背包问题

    可做hdu2602:http://acm.hdu.edu.cn/showproblem.php?pid=2602

    代码1:

    #include <fstream>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    
    using namespace std;
    #define N 1007
    
    int c[N],w[N],dp[N][N];
    
    int main(){
        //freopen("D:\input.in","r",stdin);
        int t,i,n,V,v;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&V);
            for(i=1;i<=n;i++)
                scanf("%d",&c[i]);
            for(i=1;i<=n;i++)
                scanf("%d",&w[i]);
            for(i=0;i<=V;i++)
                dp[0][i]=0;
            for(i=1;i<=n;i++){
                for(v=0;v<=V;v++){
                    if(v>=w[i])
                        dp[i][v] = max(dp[i-1][v],dp[i-1][v-w[i]]+c[i]);
                    else
                        dp[i][v] = dp[i-1][v];
                }
            }
            printf("%d
    ",dp[n][V]);
        }
        return 0;
    }

    代码2(空间优化):

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define N 1007
    
    int c[N],w[N],dp[N];
    
    int main(){
        int t,i,n,V,v;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&V);
            for(i=1;i<=n;i++)
                scanf("%d",&c[i]);
            for(i=1;i<=n;i++)
                scanf("%d",&w[i]);
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++){
                for(v=V;v>=w[i];v--)
                    dp[v] = max(dp[v],dp[v-w[i]]+c[i]);
            }
            printf("%d
    ",dp[V]);
        }
        return 0;
    }

    恰好装满版本:

    #include <fstream>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    
    using namespace std;
    #define N 1007
    #define INF 0x7fffffff
    
    int c[N],w[N],dp[N];
    
    int main(){
        int t,i,n,V,v;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&V);
            for(i=1;i<=n;i++)
                scanf("%d",&c[i]);
            for(i=1;i<=n;i++)
                scanf("%d",&w[i]);
            dp[0]=0;
            for(i=1;i<=V;i++)
                dp[i]=-INF;
            for(i=1;i<=n;i++)
                for(v=V;v>=w[i];v--)
                    dp[v] = max(dp[v],dp[v-w[i]]+c[i]);
            n=dp[V];
            if(n>0)
                printf("%d
    ",n);
            else
                printf("无法恰好装满!
    ");
        }
        return 0;
    }
  • 相关阅读:
    <img>标签
    <a>标签
    HTML标签类型
    HTML实体
    HTML颜色的三种写法
    HTML绝对路径和相对路径
    HTML基本结构及标签样式
    Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码
    java ssm 后台框架平台 项目源码 websocket IM quartz springmvc
    分批插入数据基于mybatis
  • 原文地址:https://www.cnblogs.com/jiu0821/p/4518652.html
Copyright © 2011-2022 走看看