zoukankan      html  css  js  c++  java
  • 01背包-入门二题(poj3624 hdu2602)

    二维数组 hdu2602

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int maxn=4000;
    
    int dp[13000];
    int d;
    int w;
    int n,wl;
    
    int main(){
        memset(dp,0,sizeof(dp));
        cin>>n>>wl;
        for(int i=1;i<=n;i++){//前i种物品 
        cin>>w>>d;
            for(int j=wl;j>=1;j--){//容量为j 
                if(j>=w) dp[j]=max(dp[j],dp[j-w]+d); 
            }
        }
        cout<<dp[wl]<<endl;
        return 0;
    }
    View Code

    一维数组

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int maxn=4000;
    
    int dp[13000];
    int d[maxn];
    int w[maxn];
    int n,wl,t;
    
    int main(){
    
        cin>>t;
        while(t--){
        memset(dp,0,sizeof(dp));
        cin>>n>>wl;
        for(int i=1;i<=n;i++)
        cin>>d[i];
        for(int i=1;i<=n;i++)
        cin>>w[i];
        
        for(int i=1;i<=n;i++){//前i种物品 
            for(int j=wl;j>=0;j--){//容量为j 
                if(j>=w[i]) dp[j]=max(dp[j],dp[j-w[i]]+d[i]); 
            }
        }
        cout<<dp[wl]<<endl;
        }
        return 0;
    }
    View Code

    一维数组 poj3624

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int maxn=4000;
    
    int dp[13000];
    int d;
    int w;
    int n,wl;
    
    int main(){
        memset(dp,0,sizeof(dp));
        cin>>n>>wl;
        for(int i=1;i<=n;i++){//前i种物品 
        cin>>w>>d;
            for(int j=wl;j>=1;j--){//容量为j 
                if(j>=w) dp[j]=max(dp[j],dp[j-w]+d); 
            }
        }
        cout<<dp[wl]<<endl;
        return 0;
    }
    View Code
    柳暗花明又一村
  • 相关阅读:
    PAT 1088 三人行
    memset和memcpy
    算法训练 结点选择
    算法训练 K好数
    算法训练 最大最小公倍数
    算法训练 区间k大数查询
    算法训练 Eurodiffusion
    Kubernetes Device Plugins
    Kubeadm and Kops
    Go语言包管理工具Glide
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8796796.html
Copyright © 2011-2022 走看看