投資(動的計画DP)

 ジョンは彼が公証人の手紙を受け取ったまで彼は、壮大な叔父を知っていたことはありません。彼は後半の壮大叔父はどこか南アメリカでは、たくさんのお金を集めていたことを学んだ、とジョンは唯一の相続人であることが確認されました。 
 ジョンは一瞬のためにその多くのお金を必要としませんでした。しかし、彼は安全な場所にこの資金を保管することをお勧めすること、そして彼が引退することを決めたまでそれが育つだろうことに気づきました。銀行は債券の特定の種類は、彼のために面白かったことを彼に確信させました。 
 債券のこの種の固定値を持っており、毎年の終わりに所有者に払っ毎年関心の一定量を、提供します。債券には固定期間を持っていません。ボンズは、異なるサイズでご利用いただけます。大きいものは、通常、より良い金利を与えます。間もなくジョンは購入する債券の最適なセットを把握するのは簡単ではないことに気づきました。また、数年後、彼の資本が成長しているだろう、とスケジュールが再評価されなければなりませんでした。 
 以下の結合が可能ですと仮定します。 
年次
興味
4000
3000
400
250

 E10 000 1の資本金は$ 800の年間利息を与え、$ 4,000の2個の結合を買うことができます。それは$ 900の年間金利を与えるように2つの$ 3,000の債券、および$ 4,000のいずれかを購入することは、良いアイデアです。2年後資本金は$ 11 800まで成長してきた、そしてそれは$ 4,000 1 $ 3 000 1を販売し、購入する意味がありますので、年利$ 77 050この話はそう育つ場所ですに育つ:銀行は充電されません。債券を売買するため。来年の総合計が3回$ 4,000 $ 1 200の年間利子与えるを可能にする$ 12 850であり、 
 ここでは、あなたの問題です:そもそも量、年の数、およびそれらの値との結合の組与えられましたそして、利益は、量が債券を売買するための最良のスケジュールを使用して、一定の期間に成長する可能性がどのように大きな見つけます。

入力

 最初の行は、テストケースの数であり、単一の正の整数Nを含んでいます。テストケースは以下の通り。 
 (最大$ 1 000 000)で開始する量、および資本が成長する年の数(最大40):テストケースの最初の行には2つの正の整数が含まれています。 
 利用可能な結合の数d(1 <= D <= 10):次の行は、単一の番号を含んでいます。 
 次のD線それぞれは、結合の記述を含みます。債券の値、およびその債券の年間利子:結合の記述は、2つの正の整数で構成されています。債券の値は常に債券の利子は、その値の10%以上になることはありません$ 1 000の倍数です。

出力

 各テストケースの場合、出力 - 別の行に - 首都期間の終わりに、売買の最適なスケジュールを後に。

サンプル入力

1 
10000 4 
2 
4000 400 
3000 250

サンプル出力

14050

質問の意味:

既知の既存のお金の数、および時間を節約する計画、いくつかの預金スキーム(預金額と利益)は、どのように我々は最大の利益の後の数年尋ねることができます

コード:

私は、コードTQLから出てくるしたくないような微細な短絡があります:

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <アルゴリズム>
 4の#include < 文字列・H>
 5  
6  使用して 名前空間STDを、
7  
8  INT メイン()
 9  {
 10      int型、T、N、年、月、尾;
11      int型I、J、K。
12      int型の DP [ 100005 ]、コスト[ 100005 ]、[稼ぐ100005を];
13      のscanf(" %dの"、&T)。
14      一方(t--15      {
 16          のscanf(" %D%dの"、&月、及び年)。
17          のscanf(" %d個"、&N)
18          のために(i = 0 ; iがn <; iは++ 19          {
 20              のscanf(" %d個の%のD "、およびコスト[i]は、&得る[I])。
21              [I] / =コスト22          }
 23          のmemset(DP、0はsizeof (DP))。
24          のための(I =0 ; I <年; Iは++ 25          {
 26は              /尾=月1000年 ;    // 後に加え千優れたメモリアレイ
27              のための(J = 0 ; J <N-; J ++)      // 預金のnタイプ
28              {
 29                  (コスト= K [J]; K <=尾; K ++)   // のいずれかで利益お金、お金が最適服用、利益又はないことはできない
30                  {
 31れる                      DP [K] = MAX(DP [K]を、DP [K-コスト[J]が] + [J]を得る);
 32                  }
 33れる             }
 34がある              月= + DP [尾];     // 最大の利益は、預金の量、年に基づいて堆積物に添加
35          }
 36          のprintf(" %d個の\ n " 、月)。
37      }
 38      リターン 0 39 }

 

おすすめ

転載: www.cnblogs.com/0xiaoyu/p/11329422.html