zoukankan      html  css  js  c++  java
  • AtCoder Grand Contest 044

    比赛爆零==

     简单来说 题意就是 给一个N 然后给了4种操作的代价 求最小的代价。用DFS搜索

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main () {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	int t;
    	cin >> t;
    	while(t--) {
    		ll n, a, b, c, d;
    		cin >> n >> a >> b >> c >> d;
    		std::vector<pair<int, ll>> ops;
    		// ops.emplace_back(2, a);
    		ops.push_back(make_pair(2, a));
    		ops.push_back(make_pair(3, b));
    		ops.push_back(make_pair(5, c));
    		const ll inf = 4e18;
    		map<ll, ll> mp;
    		mp[0] = 0;
    		mp[1] = d;
    		function<ll(ll)> DFS = [&](ll x) {
    			if(mp.find(x) != mp.end()) {	//如果找到了返回这个值
    				return mp[x];
    			}
    			ll ret = inf;
    			//不进行判断会wa
    			if((long double)d * (long double)x < ret) {
    				ret = d * x;
    			}
    			for(auto& p : ops) {
    				int num = p.first;
    				ll cost = p.second;
    				//分成了两种情况:第一种是减1;第二种是加1
    				ret = min(ret, DFS(x / num) + cost + d * (x % num));
    				if(x % num != 0) {
    					ret = min(ret, DFS(x / num + 1) + cost + d * (num - x % num));
    				}
    			}
    			return mp[x] = ret;
    		};
    		cout << DFS(n) << endl;
    	}
    	return 0;
    }
    
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    volatile详解
    Java并发之AQS详解
    Thread详解
    Hibernate检索策略
    Hibernate查询方式
    Hibernate--对象关系
    hibernate--hibernate.cfg.xml常用配置详解
    hibernate--CRUD初体验
    hibernate--HelloWorld
    Struts支持的contentType
  • 原文地址:https://www.cnblogs.com/lightac/p/12952435.html
Copyright © 2011-2022 走看看