• 背包


    1, 01背包

    题目:hdoj  2546 

    代码:

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<iomanip>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    using namespace std;
    # define maxn 1010
    bool cmp(int t1,int t2){
    return t1<t2;
    }
    int  a[maxn];
    int dp[maxn];
    int main(){
    int t;
    while(cin>>t&&t){
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=t;i++)
    cin>>a[i];
    int v;
    cin>>v;
    if(v<5){
     cout<<v<<endl;
    }
    else {
    sort(a+1,a+t+1,cmp);
    for(int i=1;i<t;i++){
    for(int j=v-5;j>=a[i];j--)
    {
    dp[j]=max(dp[j-a[i]]+a[i],dp[j]);
    }
    }
    cout<<v-dp[v-5]-a[t]<<endl;
    }
    }
    return 0;
    }

    2,完全背包

    题目:hdoj 1114

    代码:

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<iomanip>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    using namespace std;
    # define maxn 10000+10
    # define inf 0x3f3f3f3f
    int a[maxn];
    int dp[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            fill(dp,dp+maxn,inf);
            int e,f;
            cin>>e>>f;
            dp[0]=0;
            int n;
            cin>>n;
            for(int i=1; i<=n; i++)
            {
                int we,val;
                cin>>val>>we;
                for(int j=we; j<=f-e; j++)
                {
                    dp[j]=min(dp[j],dp[j-we]+val);
                }
            }
            //cout<<dp[f-e]<<endl;
            if(dp[f-e]==inf)
                cout<<"This is impossible."<<endl;
            else
                cout<<"The minimum amount of money in the piggy-bank is "<<dp[f-e]<<"."<<endl;
        }
    return 0;
    }
    3,多重背包、

    题目:hdoj 2191

    代码:

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<iomanip>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    using namespace std;
    # define maxn 105
    int dp[maxn],a[maxn],we[maxn],val[maxn],num[maxn];
    int main()
    {
        int c;
        cin>>c;
        while(c--)
        {
            memset(dp,0,sizeof(dp));
            int n,m;
            cin>>n>>m;
            for(int i=1; i<=m; i++)
            {
                cin>>val[i]>>we[i]>>num[i];
                for(int k=1;k<=num[i];k++)
                for(int j=n; j>=val[i]; j--)
                {
                    dp[j]=max(dp[j-val[i]]+we[i],dp[j]);
                }
            }
            cout<<dp[n]<<endl;
        }
        return 0;
    }


     

  • 相关阅读:
    iOS刨根问底-深入理解RunLoop
    深入理解RunLoop
    Core Graphics框架 利用Quartz 2D绘图
    经济
    次贷危机的原因
    次级抵押贷款
    信用评级
    信用
    理解UIView的绘制-孙亚洲
    二级域名
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262995.html
Copyright © 2020-2023  润新知