ブルーブリッジカップALGO-21トレーニングアルゴリズムパッキング問題

パッキング学習アルゴリズムの問​​題  

制限時間:メモリ制限が1.0S:256.0メガバイト

 

問題の説明
  ボックス容量V(正の整数、0 <= V <= 20000を有している )、 アイテム(0 <N <= 30)のNがありながら 、 各項目は、ボリューム(正の整数)を有しています。
  n個のアイテムの残りの空間要件ボックスが最小化されるように、ボックスに番号のいずれかを取ります。

 

入力フォーマット
  最初の行為のボックスの容量を表す整数、
  二行目は整数、n個の項目があることを示し、
  次のn行、各行は、n個のアイテムのそれぞれの整数の体積を表します。

 

出力は、フォーマット
  ボックスの残りの空間を表す整数。

 

サンプル入力
  24
  。6
  。8
  。3
  12である
  。7
  。9
  。7

 

サンプル出力
0


分析:セットF(I、V)の容量として、V第一の処理にボックス、私アイテムの後のスペースが占有されています。そこ漸化式:

F(I、V)= \ {ケースを}開始\最大\ {F(I-1、V)、F(I-1、V-V_I)+ V_I \}&\テキスト{もし} V \ GEのV_I \ \ iは0、V \ GE 0 \端{ケース} = {場合} F(I-1、V)&\テキスト{もし} V <V_I \\ 0 \テキスト

 

#include <stdio.h>

int max(int a, int b)
{
    return a > b ? a : b;
}

int main()
{
    int V, n;
    int volume[35] = { 0 };
    int f[35][20005] = { 0 };

    scanf("%d", &V);
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &volume[i]);

    for (int i = 1; i <= n; ++i)
    {
        for (int v = 0; v < volume[i]; ++v)
            f[i][v] = f[i-1][v];
        for (int v = volume[i]; v <= V; ++v)
            f[i][v] = max(f[i-1][v], f[i-1][v-volume[i]] + volume[i]);
    }
    printf("%d", V - f[n][V]);

    return 0;
}

 

公開された221元の記事 ウォン称賛40 ビュー40000 +

おすすめ

転載: blog.csdn.net/liulizhi1996/article/details/104005606
おすすめ