タイトル説明
Jinming私は家族がキー必需品に新しい家を購入し、新しい部屋があり、非常に満足していますが、自分自身に非常に広々とした客室を捧げました。彼は昨日、より喜んで私の母ことになったと彼に言った:「あなたは、あなたがいる限りライン上のNドルを超えないように、最終決定権を持っているアイテムを購入するために、どのようにレイアウト、部屋を必要とします」今朝Jinmingは、予算を始めたが、彼は確かに限界N母元を超えてしまいますので、多くのものを購入したいです。このように、彼は重要度を指定し、等が5分割された各項目:1〜5は、最も重要ななど、第五、整数を示しました。彼はまた、インターネットからの各項目(整数ドルです)の価格を発見しました。彼は、積の和と各項目の最大の価格の重要度の(Nに等しくてもよい要素)N元素を超えることなく望んでいます。アイテムjはV [J]、[J] W重要度、k個の選択されたアイテムの合計、番号J1の順序... JKための第一のセットの価格は、その後、必要な合計である:V [J1] * W [J1] + ... + V [JK] * [JK]買い物リストの要件を満たすように設計されたJinmingを助けてくださいwは。
入力形式
2つの正の整数として空間によって分離された第1行目から1つの入力:
Nメートル
(ここで、Nは、(<30000)から購入アイテムの所望の数に合計金額、M(<25)を表します。)
列2から列M + 1、j番目の行は、番号j-1を与えます
基本データ項目は、各列は、二つの非負整数を有します
VP
(vがアイテム(v≤10000)の価格を表し、pは、物品の重要度を示している(1〜5))
出力フォーマット
出力のみの正の整数、および価格については、製品の重要性は、金額の合計額に項目の合計を超えていません
最大値(<100 000 000)
サンプル入力
5 1000
800 2
400 5
300 5
400 3
200 2
サンプル出力
3900
問題解決のためのアイデア
このタイトルは、ナップザック問題を見てですが、私はただ貪欲に断固として始まっかそこらだけで30を行います。
この問題は、バックパック01の変形例であり、状態遷移方程式:F [J] =最大{F [J]、F [JW [I] + W [I] * V [I]}。
コードは以下の通りです
1の#include <iostreamの> 2の#include <アルゴリズム> 3 使用して 名前空間STDを、 4 構造体ノード{ 5 int型V、W、S。 6 } T [ 40010 ]。 7 のint F [ 40010 ]。 8 INT メイン(){ 9 int型N、M。 10 CIN >> N >> M。 11 のために(int型 I = 1 ; I <= M; iが++ ){ 12 のint X、Y。 13 CIN >> X >> Y。 14 T [i]は.V = xと; T [i]は.W = Y。T [i]は.S = X * Y。 15 } 16 のために(int型 I = 1 ; I <= M; iが++ ){ 17 のために(int型 J = N; J> = T [i]は.V; j-- ){ 18 F [J] = MAX(F [J]、[J - T [i]は.V] F + [I] .S)T。 19 } 20 } 21 COUT << F [N] << ENDL。 22 リターン 0 ; 23 }