zoukankan      html  css  js  c++  java
  • 5.H

    题目连接: http://acm.hust.edu.cn/vjudge/contest/126708#problem/H

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[1005],b[105],dp[100005];
    void inital()
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(dp,0,sizeof(dp));
    }
    void bag01(int v,int c,int m)
    {
        for(int i=m;i>=c;i--)
         dp[i]=max(dp[i],dp[i-c]+v);
    }
    void complete(int v,int c,int m)
    {
        for(int i=c;i<=m;i++)
         dp[i]=max(dp[i],dp[i-c]+v);
    }
    void multiply(int v,int c,int m,int am)
    {
        if(v*am>m) complete(v,c,m);
        else
        {
            int k=1;
            while(k<am)
            {
                bag01(k*v,k*c,m);
                am-=k;
                k*=2;
            }
            bag01(am*v,am*c,m);
        }
    
    }
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(n==0&&m==0) break;
            inital();
            for(int i=1;i<=n;i++)
             scanf("%d",&a[i]);
             for(int i=1;i<=n;i++)
              scanf("%d",&b[i]);
             for(int i=1;i<=n;i++)
              multiply(a[i],a[i],m,b[i]);
              int sum=0;
              for(int i=1;i<=m;i++)
             //cout<<dp[i]<<endl;
              if(dp[i]==i) sum++;
               printf("%d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    ACdream 1069 无耻的出题人
    ACdream 1064 完美数
    ACdream 1028 Path
    ACdream 1020 The Game about KILL
    ACdream 1015 Double Kings
    CodeForces
    Codeforces 390A( 模拟题)
    Codeforces 389B(十字模拟)
    Codeforces 389A (最大公约数)
    Codeforces 417 C
  • 原文地址:https://www.cnblogs.com/Twsc/p/5767560.html
Copyright © 2011-2022 走看看