zoukankan      html  css  js  c++  java
  • cf 730J. Bottles

    搞一个背包,233

    要求用的瓶数最少,那么就业瓶数为第一关键,当瓶数相当后再以a[i]

     1 #include<bits/stdc++.h>
     2 #define N 100005
     3 #define LL long long
     4 #define inf 0x3f3f3f3f
     5 #define ls tr[x][0]
     6 #define rs tr[x][1]
     7 using namespace std;
     8 inline int ra()
     9 {
    10     int x=0,f=1; char ch=getchar();
    11     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    12     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    13     return x*f;
    14 }
    15 int a[N],b[N];
    16 int f[N],size[N];
    17 int main()
    18 {
    19     int n=ra(),sum=0,tot=0;
    20     memset(size,0x7,sizeof(size)); size[0]=0;
    21     for (int i=1; i<=n; i++) a[i]=ra(),sum+=a[i];
    22     for (int i=1; i<=n; i++) b[i]=ra(),tot+=b[i];
    23     for (int i=1; i<=n; i++)
    24         for (int j=tot; j>=0; j--)
    25         {
    26             if (size[j]+1==size[j+b[i]])
    27                 f[j+b[i]]=max(f[j+b[i]],f[j]+a[i]);
    28             if (size[j]+1<size[j+b[i]])
    29             {
    30                 size[j+b[i]]=size[j]+1;
    31                 f[j+b[i]]=f[j]+a[i];
    32             }
    33         }
    34     int anssz=inf,ans;
    35     for (int i=sum; i<=tot; i++)
    36     {
    37         if (anssz==size[i])
    38             ans=max(ans,f[i]);
    39         if (anssz>size[i])
    40         {
    41             anssz=size[i];
    42             ans=f[i];
    43         }
    44     }
    45     printf("%d %d",anssz,sum-ans);
    46     return 0;
    47 }

    大为第二关键(因为要求转移时间最小,我们选出的是不转移的瓶子,所以要求最大)

  • 相关阅读:
    gdb调试动态链接so
    set non-stop on
    ntp对时
    360se打开慢,lsass 过高 , cpu温度上升
    CiscoIOUKeygen
    jitwatch查看JIT后的汇编码
    直接打开virtualbox报错
    老码农的Java干货资源
    java C 类自动转换规则
    java static learning
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6392132.html
Copyright © 2011-2022 走看看