0x52 背包

还行

前面的题没啥意思

完全背包一个很难写的题poj1015 Jury Compromise

poj1742 多重背包啊,开始写了二进制拆分TLE了,由于是判是否可以组成,那么可以用一个贪心的思想,顺着for一个个叠加

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;

int a[110],c[110],q[2100];
bool f[110000];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0||m==0)break;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)scanf("%d",&c[i]);
        
        int len=0;
        for(int i=1;i<=n;i++)
        {
            int k=(1<<10);
            while(k-1>c[i])k>>=1;
            k>>=1;
            while(k>0)
            {
                q[++len]=a[i]*k;
                c[i]-=k;k>>=1;
            }
            if(c[i]!=0)q[++len]=a[i]*c[i];
        }
        n=len; 
        
        //------------二进制拆分-----------------
        
        memset(f,false,sizeof(f));f[0]=true;
        for(int i=1;i<=n;i++)
            for(int j=m;j>=q[i];j--)
                if(f[j-q[i]]==true)f[j]=true;
        
        int ans=0;
        for(int i=1;i<=m;i++)
            if(f[i]==true)ans++;
        printf("%d\n",ans);
    }
    return 0;
}
poj1742(TLE)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;

int a[110],c[110];
bool f[110000]; int u[110000];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0||m==0)break;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)scanf("%d",&c[i]);
        
        memset(f,false,sizeof(f));f[0]=true;
        for(int i=1;i<=n;i++)
        {
            memset(u,0,sizeof(u));
            for(int j=a[i];j<=m;j++)
                if(f[j]==false&&f[j-a[i]]==true&&u[j-a[i]]<c[i])
                {
                    f[j]=true;
                    u[j]=u[j-a[i]]+1;
                }
        }
        
        int ans=0;
        for(int i=1;i<=m;i++)
            if(f[i]==true)ans++;
        printf("%d\n",ans);
    }
    return 0;
}
poj1742

分组背包没例题啊,而且好像也没什么

posted @ 2018-08-10 16:34  AKCqhzdy  阅读(222)  评论(0编辑  收藏  举报