「可能な限り小さく、最大は」非常に一般的な最適化の目標です。
書籍に関する揚げ。
このトピックを見て:
http://poj.org/problem?id=1505
次のようにコードの私のコピーは、次のとおりです。
書式#include <iostreamの> の#include <cstdioを> する#include <CStringの> 名前空間stdを使用。 int型のブック[505]。 ブールフラグ[505]。 int型M、K。//メートル:図書の数。K:スクライバーの数。 int型のCNT; // CNTは、カウントの略です。 INTコピー(長い長いX) { CNT = 1。 長い長い合計= 0; memset(フラグ、偽、はsizeof(フラグ))。 (I = M-1 int型; I> = 0; i--)のために { 和+ =ブック[I]。 (和> X)であれば { CNT ++。 合計=ブック[i]は、 フラグ[i]が真=。 } } CNTを返します。 } ボイドプリント() { printf( "%d個"、ブック[0])。 以下のために(; iがm <I ++はI = 1 INT) { IF(フラグ[I-1])のprintf( "/")を。 printf( "%d個"、ブック[I]); } のprintf( "の\ n"); } int型のmain() { int型のT。 scanf関数( "%のD"、&T)。 長い長L、R。 (T--)一方 { scanf関数( "%d個の%のD"、&M、およびK); L = R = 0。 以下のために(; iがm <I ++は、I = 0 INT) { scanf関数( "%d個"、&ブック[I])。 (ブック[I]> L)、L =ブック[i]の場合、 R + =ブック[I]。 } 長い長いミドル。 半ば=(L + R)/ 2。 IF(コピー(MID)<= K)、R =ミッド。 他リットル=ミッド+ 1; } int型CNT =コピー(R) 以下のために(; && iがm <CNTを<K、I = 0 int型私は++) { もしフラグ[I] =真、CNT ++(フラグ[i]が!)。 } 印刷()。 } 0を返します。 }