01バックパック(1次元の最適化)

http://acm.hdu.edu.cn/showproblem.php?pid=1171

HDUビッグイベント

制限時間:5000分の10000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):58312受理提出(S):19584


問題の説明
今日では、我々はすべてのコンピュータ・カレッジはHDUで最大の部門であることを知っています。しかし、多分あなたはコンピュータ専門学校はこれまで、2002年に専門学校やソフトウェア・カレッジに分割されていたことを知らない
分割は絶対にHDUで大きなイベントです!同時に、それはあまりにも面倒なものです。すべての施設が半分に行かなければなりません。まず、すべての施設が評価され、2つの施設は、それらの値が同じであれば同じであると考えられています。N(0 <N <1000)設備の種類(異なる値、異なる種類)があることが想定されます。
 

 

入力
入力は複数のテストケースが含まれています。各テストケースは、数N( -異なる設備の総数0 <N <= 50)で始まります。次のNラインは整数V(0 <V <=施設の50 --value)及び整数M(設備の0 <M <= 100 --corresponding数)をそれぞれ含みます。あなたは、すべてのVが異なっていると仮定することができます。
負の整数で始まるテストケースは、入力を終了し、このテストケースは、処理されるべきではありません。
 

 

出力
それぞれのケースについて、専門学校やソフトウェア・カレッジの値を示す二つの整数AとBを含む印刷1行がそれぞれ取得します。A及びBは、できるだけ等しくなければなりません。同時に、あなたはAがBよりも小さくないことを保証すべきです
 

 

サンプル入力
2 10 1 20 1 3 10 1 20 2 30 -1
 

 

サンプル出力
20 10 40 40
 

 

著者
LCY
 第1の2次元01ナップザック寸法のみFを使用する[I-1]、F [i]は、最初の次元は、スクロール・アレイを使用して、除去することができます。
https://www.cnblogs.com/zyacmer/p/9961710.html
// の#include <ビット/ STDC ++。H> 
の#include <cstdioを> 
する#include <CStringの> 
する#include <cmath> 
の#include <アルゴリズム> 
の#include <iostreamの> 
する#include <アルゴリズム> 
の#include <iostreamの> 
する#include <cstdioを> 
書式#include < 文字列 > 
の#include <CStringの> 
書式#include <stdio.hに> 
する#include <キュー> 
の#include <スタック> 
#include <地図> 
の#include < 設定 > 
の#include < 文字列・H> 
の#include <ベクトル>
 #defineする MEを(X、Y)のmemset(X、Y、はsizeof(X))
 の#define SF(N)のscanf(」 %のD」、&N)
 の#define担当者(I、N)のためには、(i = 0、int型、iがN <; I)が++
 の#define INF 0x3f3f3f3f
 の#define MOD十億七
 の#define PIのACOS(-1)を
 使用して 名前空間STDを、
typedefの長い 長いLL。
int型の DP [ 255555 ]。
INT W [ 5009 ]。

int型のmain()
{
    int型のn;
    一方、(〜のscanf(" %d個"、&​​N)&& N> 0 
    {
        int型 I = 1、I = 0 ;
        memsetの(DP、0はsizeof (DP))。
        以下のためにint型 i = 0 ; iがn <; iは++ 
        {
            int型V、どうか。
            scanf関数(" %d個の%d個"、&​​V、&NUM);
            しばらく(num-- 
            {
                W [L ++] = V。
                合計 + = V;
            }
        }
        以下のためにint型 i = 1 ; iはLを<; iは++ 
        {
            INT J =和/ 2 ; J> = W [I]; j-- 
            {
                DP [J] = MAX(DP [J]、DP [JW [I] + [I] W)。
            }
        }
        COUT <<和- DP [和/ 2 ] << "  " << DP [和/ 2 ] << ENDL。

    }

    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/nonames/p/11671645.html