zoukankan      html  css  js  c++  java
  • 【HDU6709】Fishing

    题目大意:有 N 条鱼,每条鱼都有钓鱼和烤鱼的时间,钓鱼的时间均相同,每条鱼都有自己的烤鱼时间,一次只能烤一条鱼,且不能间断。现要求通过某种顺序将所有的鱼钓上来并烤完,求最小的时间是多少。

    题解:
    对于顺序可以自选的情况,可以从全局的角度进行考虑。对于最终状态,每条鱼被烤的时间和钓鱼的总次数是固定的,且一定要先钓上来一条鱼。最好情况就是所有的其他鱼均可以在烤鱼的时候钓上来。不过,可能会存在一些烤鱼的时间无法满足钓上来一整条鱼的时间。因此,可能会出现正在钓鱼但是锅里没有鱼的情况,这部分时间是被浪费的时间。那么,我们只需要使得这部分的时间最小即可,即:用这些最小的时间去钓鱼,其他剩余的时间等待,保证总有鱼在锅里煮。

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    int main() {
    	int T;
    	scanf("%d", &T);
    	while (T--) {
    		static int n, k;
    		scanf("%d %d", &n, &k);
    		vector<int> t(n + 1), waste(n + 1);
    		LL ans = k;
    		int cnt = 0;
    		for (int i = 1; i <= n; i++) {
    			scanf("%d", &t[i]);
    			ans += t[i];
    			cnt += t[i] / k;
    			waste[i] = k - t[i] % k;
    		}
    		if (cnt >= n - 1) {
    			printf("%lld
    ", ans);
    		} else {
    			sort(waste.begin(), waste.end());
    			int need = n - 1 - cnt;
    			for (int i = 1; i <= need; i++) {
    				ans += waste[i];
    			}
    			printf("%lld
    ", ans);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    解决sql2008附加不了2005的数据库文件的问题
    方阵
    台阶问题
    螺旋矩阵
    兔子问题
    九乘九乘法口诀
    选猴王
    拿鸡蛋问题
    软工个人作业
    小学四则运算法则训练
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/11425396.html
Copyright © 2011-2022 走看看