[Ybtoj第2章例1]衣類を乾燥させる牛[貪欲] [大きな根の山]

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入


問題解決のアイデア

答えは、最後の衣類を乾かすのに必要な時間に関連していることに注意してください。乾燥機に関係なく、最後に乾燥させる衣類は湿度が最も高いものでなければなりません。ですから、湿度が最も高い服の湿度はできるだけ低くしてください。

したがって、貪欲な戦略を立ててください。湿度が最も高い服を選択して、毎回乾燥機を使用してください。

ai − t ∗ A <= 0 a_i-t * A <= 0の場合、牛の衣類を乾燥させるプロセスをシミュレートし、電流をt分として設定します。AtA<=0、i番目の衣服が乾燥していることがわかります。このような時間計算量はO(n 2)O(n ^ 2)です。O n2、したがって、大きなルートパイルを使用して衣服の湿度を維持し、時間計算量をO(nlogn)O(n log n)に減らすことができます。O n l o g n


コード

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
priority_queue<int> q;

int t,n,A,B,a[500010];

int main(){
    
    
	scanf("%d%d%d",&n,&A,&B);
	for(int i=1;i<=n;i++)
	{
    
    
		scanf("%d",&a[i]);
		q.push(a[i]);
	}
	while(q.top()-t*A>0)
	{
    
    
		t++;
		int x=q.top();
		q.pop();
		q.push(x-B);
	}	
	printf("%d\n",t);
}

おすすめ

転載: blog.csdn.net/kejin2019/article/details/111707422