Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- typedef long long LL;
- #define MIN(x,y) (((x)<(y))?(x):(y))
- int c1,c2,c3;
- LL ans[114514] = {0};
- LL dfs(int k){
- if(ans[k]){
- return ans[k];
- }
- else{
- LL m = dfs(k - 1) + c1,m2;
- if(k % 2 == 0){
- m2 = dfs(k / 2) + c2;
- m = MIN(m,m2);
- }
- if(k % 3 == 0){
- m2 = dfs(k / 3) + c3;
- m = MIN(m,m2);
- }
- ans[k] = m;
- return m;
- }
- }
- int main(){
- int n;
- scanf("%d%d%d",&c1,&c2,&c3);
- ans[1] = c1;
- while(~scanf("%d",&n)){
- printf("%lld\n",dfs(n));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement