幸せJinmingアルゴリズムブルーブリッジカップALGO-31トレーニング

幸せJinmingアルゴリズムトレーニング  

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

 

問題の説明
  Jinming私の家族は、キーの必需品に新しい家を購入し、新しい部屋があり、非常に満足していますが、自分自身に非常に広々とした客室を捧げました。彼はさらに私の母は昨日ことを喜んと彼に言っなった:「あなたがライン上にNドルよりも、限りこれ以上、あなたが最終決定権を持っているか、レイアウト、購入するアイテムの部屋を必要とします」今朝Jinmingは、予算を始めたが、彼は確かに制限N母元を超えてしまいますので、多くのものを購入したいです。このように、彼は重要度を指定し、など5分割された各項目:1〜5は、最も重要ななど、第五、整数を示しました。彼はまた、インターネットからの各項目(整数ドルです)の価格を発見しました。彼は、N個の積の和の要素(要素がNに等しくてもよい)と、各アイテムの最大の価格の重要度を超えることなく望んでいます。
  商品数J V [J]、重要W度[J]のための第一のセットの価格、J1、J2、...、JKとして順番に番号kの選択された項目の合計は、次いで、必要和である:
  V [J1 ] * W [J1] + V [J2] * W [J2] + ... + V [JK] * [JK]ワット (*は乗算記号である場合には)
  助けJinmingは、買い物リストの要件を満たすように設計してください。

 

入力形式
  入力ファイルの1行目、2つの正の整数、スペースで区切られた:
  NのM
  (N(<30000)の合計金額を表し、M(<25)を購入したアイテムの所望の数まで)
  から行M + 1、j行目の行2は、物品番号j-1を与える基本的なデータであり、各ラインは、整数2非負有する
  VP
  vはアイテムの価格(V <= 10000)を表し( 、p)は、物品(1〜5)の重要度を表します

 

出力形式の
  製品の価格の重要度に最大出力ファイルのみ正の整数は、和のお金の項目の合計数を(<100 000 000)を超えていません。

 

サンプル入力
1000 5
800 2
400 5
300 5
400 3
200である2

 

サンプル出力
3900

 

スケールデータと規則

 

分析:セットF(I、N)での総予算持つようにn個前処理された要素の前提の私漸化式があり、最大の価格及び取得した製品の項目の合計、の重要度を

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

 

#include <stdio.h>

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

int main()
{
    int N, m;
    int v[30] = { 0 }, p[30] = { 0 };
    int f[30][30005] = { 0 };

    scanf("%d %d", &N, &m);
    for (int i = 1; i <= m; ++i)
        scanf("%d %d", &v[i], &p[i]);

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

    return 0;
}

 

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

おすすめ

転載: blog.csdn.net/liulizhi1996/article/details/104006402