AtCoder Regular Contest 083 C: Sugar Water

题意

给你一个空杯子,有4种操作:
操作1 加100a克的水
操作2 加100b克的水
操作3 加c克的糖
操作4 加d克的糖
糖的质量不能超过水的质量e/100
糖和水的总质量不能超过f
糖的质量不能超过水的质量
a/100
在此前提下糖的浓度最大
输出糖和水的总质量以及糖的质量

分析

根据原题数据范围,可以直接三重for循环枚举操作1,2,3的次数.
坑点在于不能没有水,因此最大浓度下不能加糖时至少要有100a克的水.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main(){
  int a,b,c,d,e,f;
  scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
  int ans1=0,ans2=0;double rate=0.0;
  for(int i=0;i*100*a<=f;++i){
    for(int j=0;j*100*b+i*100*a<=f;++j){
      if(i+j==0)continue;
      int sum=j*100*b+i*100*a;
      int lim=min(sum/100*e,f-sum);
      for(int k=0;k*c<=lim;++k){
	int l=(lim-k*c)/d;
	int sugar=l*d+k*c;
	if(double(sugar)/sum>rate){
	  rate=double(sugar)/sum;
	  ans1=sum+sugar;ans2=sugar;
	}
      }
    }
  }
  if(rate==0)printf("%d %d\n",100*a,0);
  else printf("%d %d\n",ans1,ans2);
  return 0;
}
posted @ 2017-09-16 21:46  liu_runda  阅读(301)  评论(0编辑  收藏  举报
偶然想到可以用这样的字体藏一点想说的话,可是并没有什么想说的. 现在有了:文化课好难