zoukankan      html  css  js  c++  java
  • hdu 5410 CRB and His Birthday 01背包和全然背包

    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048];
        scanf("%d
    ",&_);
        while(_--)
        {
            scanf("%d%d",&m,&n);
            for(i=0;i<n;i++)
                scanf("%d%d%d",&w[i],&a[i],&b[i]);
            memset(dp,0,sizeof(dp));
            for(i=0;i<n;i++)
            {
                for(j=m;j>=w[i];j--)
                    dp[j]=max(dp[j],dp[j-w[i]]+a[i]+b[i]);
                for(j=w[i];j<=m;j++)
                    dp[j]=max(dp[j],dp[j-w[i]]+a[i]);
            }
            printf("%d
    ",dp[m]);
        }
        return 0;
    }
    

    第一次所有当成01背包做无限超时。

    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048];
        scanf("%d
    ",&_);
        while(_--)
        {
            scanf("%d%d",&m,&n);
            for(i=0;i<n;i++)
                scanf("%d%d%d",&w[i],&a[i],&b[i]);
            memset(dp,0,sizeof(dp));
            for(i=0;i<n;i++)
            {
                k=m/w[i];
                while(k!=0)
                {
                    for(j=m;j>k*w[i];j--)
                        dp[j]=max(dp[j],dp[j-k*w[i]]+k*a[i]+b[i]);
                    k--;
                }
            }
            printf("%d
    ",dp[m]);
        }
        return 0;
    }
  • 相关阅读:
    二分图的部分关系
    二分图的部分关系
    日常训练赛 Problem C – Complete Naebbirac’s sequence
    日常训练赛 Problem C – Complete Naebbirac’s sequence
    J
    J
    Python strip()方法
    Python startswith()方法
    Python splitlines()方法
    Python split()方法
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7048794.html
Copyright © 2011-2022 走看看