#include <iostream>#include <vector>#include <algorithm>usingnamespacestd;booldecision(intx);intoptimise();boolcomp(constinttemp1,constinttemp2);intn;//재료의 가짓수intr[10],c[10];//필요한 재료 i의 수, 재료i의 칸수vector<int>ingredient[10];//각 칸에 해당하는 재료의 갯수intmain(){intcases;cin>>cases;while(cases--){cin>>n;for(inti=0;i<n;++i){cin>>r[i]>>c[i];ingredient[i].resize(c[i]);for(intj=0;j<c[i];++j)cin>>ingredient[i][j];}for(inti=0;i<n;++i)sort(ingredient[i].begin(),ingredient[i].end(),comp);cout<<optimise()<<endl;for(inti=0;i<10;++i)ingredient[i].clear();}return0;}booldecision(intx){intremain=10;//재료순회for(inti=0;i<n;++i){inttemp=x*r[i];//각 재료당 칸 순회for(intj=0;j<c[i];++j){//추가적으로 칸의 선택이 불가if(remain<=0)returnfalse;temp-=ingredient[i][j];remain--;//필요한 재료 충당if(temp<=0)break;}//재료가 부족하다if(temp>0)returnfalse;}//모든 재료가 다 충당됨returntrue;}intoptimise(){intlo=0,hi=1000;intmid;for(intiter=0;iter<100;++iter){mid=(lo+hi)/2;if(decision(mid))lo=mid;elsehi=mid;}returnlo;}boolcomp(constinttemp1,constinttemp2){returntemp1>temp2;}
##문제 접근
1. 일단 그리디를 이용해서 각 재료가 수납된 칸들을 내림차순으로 정렬 했습니다.
2. 그다음 이분법을 이용해서 답을 도출해냅니다.
##사용된 함수
1. bool decision(int x) : 재료들을 이용해 아이템을 x개 만들수 있으면 true, 없으면 false를 리턴합니다
2. int optimise() : 이분법을 실행하는 함수입니다. lo = 0, hi = 1000 으로 초기화하고 decision(mid)가 true 를 반환하면 lo에 mid를 대입하고 그렇지 않으면 hi에 mid를 대입해서 이 같은 과정을 100번 반복하고 lo를 리턴합니다.
testyong
##문제 : AUTOPRODUCTION
##코드
##문제 접근
1. 일단 그리디를 이용해서 각 재료가 수납된 칸들을 내림차순으로 정렬 했습니다.
2. 그다음 이분법을 이용해서 답을 도출해냅니다.
##사용된 함수
1. bool decision(int x) : 재료들을 이용해 아이템을 x개 만들수 있으면 true, 없으면 false를 리턴합니다
2. int optimise() : 이분법을 실행하는 함수입니다. lo = 0, hi = 1000 으로 초기화하고 decision(mid)가 true 를 반환하면 lo에 mid를 대입하고 그렇지 않으면 hi에 mid를 대입해서 이 같은 과정을 100번 반복하고 lo를 리턴합니다.
8년 전