zoukankan      html  css  js  c++  java
  • luogu1833 樱花

    背包问题小合集

    01背包 完全背包 多重背包混着来

    对于01背包:把它想象成最大物品数为1的多重背包

    对于完全背包:把它想象成最大物品数为m/w[i]的多重背包

    对于多重背包:把它想象成。。。等等这本来就是个多重背包

    数据比较水 但是我也写了个倍增优化

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int f[300];
    int v[300],W[300],m[300];
    int i,j;
    int main()
    {
        string ts,te;
        int n;
        cin>>ts>>te;
        cin>>n;
        int a1=0,a2=0;
        int flag1,flag2;
        for(i=0;i<ts.length();i++)if(ts[i]==':')flag1=i;
        for(i=0;i<te.length();i++)if(te[i]==':')flag2=i;
        for(i=0;i<flag1;i++)a1=10*a1+ts[i]-'0';
        int temp=0;
        for(i=flag1+1;i<ts.length();i++)temp=10*temp+ts[i]-'0';
        a1=60*a1+temp;
        for(i=0;i<flag2;i++)a2=10*a2+te[i]-'0';
        temp=0;
        for(i=flag2+1;i<te.length();i++)temp=10*temp+te[i]-'0';
        a2=60*a2+temp;
        
        
        
        
        int w=a2-a1;
        while(n--)
        {
            int i,j;
            int Value,weight,m;
            scanf("%d%d%d",&weight,&Value,&m);
            if(m==0)m=w/weight;
            for(i=0;((1<<(i+1))-1)<=m;i++)
                for(j=w;j>=(weight<<i);j--)f[j]=max(f[j],f[j-(weight<<i)]+(Value<<i));
            weight=weight*m-(weight<<i)+weight;Value=Value*m-(Value<<i)+Value;
            if(weight>0)
                for(j=w;j>=weight;j--)f[j]=max(f[j],f[j-weight]+Value);
        }
        printf("%d",f[w]);
    }
    View Code

    倍增优化详见

     http://www.cnblogs.com/Kong-Ruo/p/7700718.html

  • 相关阅读:
    centos 7安装gitlab及使用
    jenkins配置自动执行sql脚本
    zabbix监控mysql主从同步
    linux服务器通过mailx邮件发送附件到指定邮箱
    监控pos收银机
    elk安装与配置
    zabbix实时监控mysql业务数据
    Build Eclipse plug-in for Hadoop
    io 一不小心 关闭不住的偶
    hdu 1059二进制优化背包问题
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7700734.html
Copyright © 2011-2022 走看看