[ブルーブリッジカップ] [アルゴリズムはVIPを改善]銀行家のアルゴリズムに似てのみ*貪欲な思考かつて神とジェンガ簡単の盾、

基本的な考え方:

一言で言えば、多くのニーズを、ソートの数を要求する最低限の要件を満たすために、彼のオリジナルの一部を取り戻すために、長い出会い、貪欲です。

実際には、OSの銀行家のアルゴリズムのレプリカがあります。

 

キーポイント:

状況は完全な需要の数、見て必要性を持っている数よりもケース四十五パーセントの大きいがあることに注意してください。

 

#include <iostreamの> 
する#include <STDLIB.H> 
する#include <stdio.hに> 
する#include <ベクトル> 
の#include <ストリング> 
の#include <math.h>の
書式#include <アルゴリズム> 
の#include <CStringの> 
する#include <地図> 
書式#include <キュー> 
の#include <設定> 
書式#include <スタック> 
std名前空間を使用しました。

構造体ノード{ 
	int型xuyao。
	yiyouをint型。
}。

ベクター<ノード> VEC。
ベクトル<文字列>のres; 
整数M、N。

ブールCMP(ノードA、ノードB){ 
	戻りa.xuyao <b.xuyao。
} 

メインINT(){ 
	CIN >> M。
	int型のA、B; 
	{(; I <M I ++ iが0 = INT)のため
		VEC。(0)リサイズ。
		cinを>> N;
		int型CNT = 0;
		ブールフラグ= TRUE。
		以下のために(INT I = 0、I <N; I ++){ 
			CIN >> B。
			(> = B)であれば{ 
				CNT + = A。
			} 
			{他
				のないノード。
				no.xuyao = B - 。
				no.yiyou =; 
				vec.push_back(NO)。
			} 
		} 
		ソート(vec.begin()、vec.end()、CMP)。
		用(INT iは= 0; I <vec.size(); I ++){ 
			IF(VEC [i]が.xuyao <= CNT){ 
				//如果可以分配; 
				CNT + = VEC [i]は.yiyou。
			} 
			他{ 
				//如果不可以分配; 
				フラグ= FALSE。
				ブレーク; 
			} 
		} 
		(フラグ)場合
			res.push_back( "YES")。
		そうしないと
			res.push_back( "NO"); 
	}
	(自動ELE:RES)のために{ 
		COUT << ELE << ENDL。
	} 
	0を返します。
}

  

おすすめ

転載: www.cnblogs.com/songlinxuan/p/12353181.html