• codeforces #407(div1c div 2e)The Great Mixing


    给出k瓶可乐,浓度为ai/1000,输出最少用多少瓶才能配出浓度为n的可乐?

    分析:显然,每个浓度对最终浓度的贡献是ai-n,如果最终总和贡献为0的时候,那就是一个答案

    那么,浓度贡献的范围是[-1000,1000],+1000映射到[0,2000],

    只要关心每一个贡献出现的时候最少多少瓶就Ok了

    bfs搜一发

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e4+5;
     4 int n,k;
     5 
     6 int a[maxn],b[maxn],v,tot=0;
     7 
     8 queue<int> q;
     9 
    10 int main(){
    11     scanf("%d%d",&n,&k);
    12 
    13     for(int i=0;i<k;i++){
    14         scanf("%d",&v);
    15         a[v]=1;
    16     }
    17 
    18     if(a[n]==1){
    19         puts("1");
    20         return 0;
    21     }
    22 
    23 
    24 
    25     for(int i=0;i<=1000;i++)if(a[i]==1){
    26         b[tot++]=i;
    27         q.push(i-n+1001);
    28     }
    29 
    30     for(int i=0;i<tot;i++)a[b[i]-n+1001]=1;
    31 
    32     while(!q.empty()){
    33         int val=q.front();q.pop();
    34         val-=1001;
    35 
    36         for(int i=0;i<tot;i++){
    37             int vv=val+b[i]-n;
    38 
    39             if(vv==0){
    40                 printf("%d
    ",a[val+1001]+1);
    41                 return 0;
    42             }
    43             vv+=1001;
    44             if(vv<0)
    45             {
    46                 continue;
    47             }
    48             if(!a[vv]){
    49                 a[vv]=a[val+1001]+1;
    50                 q.push(vv);
    51             }
    52         }
    53     }
    54 
    55 
    56     puts("-1");
    57 
    58 
    59 
    60 
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    Java知识回顾 (8) 集合
    Java知识回顾 (7) 继承、多态与接口、封装
    使用LEANGOO泳道
    使用列表
    LEANGOO用户设置
    创建LEANGOO项目
    为看板添加成员
    创建看板卡片
    创建LEANGOO看板
    创建LEANGOO账号
  • 原文地址:https://www.cnblogs.com/jihe/p/6670956.html
Copyright © 2020-2023  润新知