zoukankan      html  css  js  c++  java
  • Pick apples sdut 2408 (V 超大的背包)

    大范围贪心,小范围背包

    #include<stdio.h>
    #include<string.h>
    
    long long d[2100];
    
    int max_num(int a,int b)
    {
         return a>b?a:b;
    };
    
    int main()
    {
        long long i,j;
        long long m,w[10],p[10],v,n;
        double val,max;
        int id,x=1,t;
    
        scanf("%d",&t);
        while(t--)
        {
            max=0;
            for(i=1; i<=3; i++)
            {
                scanf("%lld%lld",&w[i],&p[i]);
                val=p[i]*1.0/w[i];//p和w弄反了,结果wrong了12遍
                if(val>max)
                {id=i; max=val;}
            }
            scanf("%lld",&v);
    
            memset(d,0,sizeof(d));
    
            m=0;
            if(v>1000)
            {
                n=(v-1000)/w[id];
                m=n*p[id];
                v-=n*w[id];
            }
    
            for(i=1; i<=3; i++)
            for(j=w[i]; j<=v; j++)
            d[j]=max_num(d[j],d[j-w[i]]+p[i]);
    
            printf("Case %d: %lld\n",x,m+d[v]);
            x++;
        }
    
        return 0;
    }
    

    v大于1000,时先用贪心将性价比最高的填充,再用背包。

  • 相关阅读:
    课程总结第十一周
    用户场景分析
    团队冲刺10
    课程总结第十周
    团队冲刺09
    梦断代码阅读笔记03
    转发和重定向的区别
    request
    servletConfig
    servlet
  • 原文地址:https://www.cnblogs.com/bfshm/p/3112691.html
Copyright © 2011-2022 走看看