누가 도움좀...
아래는 내 생각임.
a개마다 b 원에 팔거나 c개마다 d원에 파니까
a*c개를 사는 비용은 min(c*b,a*d)임.
n/(a*c) * (a*c) 개 만큼은 a*c개씩 묶어서 삼.
남은 n%(a*c)개는 a개 묶음을 몇 개 사는지 하나하나 iterate 하는데 a*c / a <= c 이므로 시간복잡도는 O(C)임.
계속틀린다....어떡해
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c,d;
ll solve(ll n){
ll flower = n/(a*c);
n%=(a*c);
ll add = flower*min(c*b,a*d);
ll ans = INT64_MAX;
for(ll i=0; i<=n/a+10; i++){
ll fir = i*a;
ll sec = max((ll)0,n-fir);
sec = sec/c+(sec%c?1:0);
ans = min(ans,i*b + sec*d);
}
return add+ans;
}
int main(){
ll n; cin>>n;
cin>>a>>b>>c>>d;
cout<<solve(n);
}
solve에서 i범위는 왜 n/a+10?
남은 n에 a를 끼워넣는 경우가 0부터 n/a+1 까지인데 그냥 안전하게 +10까지 해줌 - dc App
당연히 배수로 안 되지
배수로안된다는게 어디말하는거임? 남은 n개 사는 과정에서? - dc App
아님 처음에 a*c개씩 묶어서 사는 아이디어가 틀린거임? - dc App
13 3 3 4 4 생각해보샘. 이 풀이대로면 12개사고 12만큼 cost지불하고, 남은 1개를 3 지불해서 15나올거임.
근데 정답은 3짜리 3개사고 4짜리 1개사서 13만들어서 13임. 반드시 처음에 a * c개를 살 필요가 없음
그러네 첨부터 잘못한거구나 - dc App