羅区P1616クレイジーハーブ

ああ...

 

トピックリンクします。https://www.luogu.org/problemnew/show/P1616

 

まず、この質問の正の解である:フルバックパック。

 

まず、バックパック?

  バックパックカテゴリ:

  バックパックは01バッグ、バックパックおよびこれらの3つの基本的なモデルの完全な複数のバックパックに分けられ、ナップサック問題の他の3種類のバックパックの拡張アプリケーションのうちからです。

  このセクションでは説明しますから適応この質問  <P1048>采药- ポータルを

  この質問は何のバックパックですか?

  一見質問表面:[无限量]薬を選ぶが、これは完全にバックパックです。

  テンプレートタイトルリュック全面このです:商品のn個の種類があり、各項目は、重量との値を有します。しかし、各項目の数はバックパックながら、無限です、

  最大荷重はMであり、これは、(同じ記事を無制限選択)いくつかの部分の物品のn種類から選択される重量及び以下Mように、最大​​値とされます。

  私たちは共同所有者、アイテムの無制限の数のそれぞれの上記の説明を参照して、この問題の特徴。だから我々は唯一の01リュックコードを若干修正する必要があります。(01マルチターンのみわずかに修正されました)

 

第二に、コード?

  バックパックの完全なコードスニペット:

1  ためint型 I = 1 ; I ++; iが= N < 2      のためのINT J = W [i]は、J <= V; J ++ 3          DP [J] = MAX(DP [J]、F [J - W [I] + C [I])。

  01バックパックスニペット:

1  ためint型 i = 1 ; iは<N =; I ++ 2      のためのINT J = M; J> = sの[I]; j-- 3          DP [J] = MAX(DP [J]、DP [ J-S [I] + V [I])。

  違いは?

  逆の変更のため、我々は、更新後に、現在の薬の再発のステータスを変更する必要があるため。だから、順序を解決するために。

 

ACコード:

1の#include <cstdioを>
 2の#include <iostreamの> 
 3  
4  使用して 名前空間STDを、
5  
6  のconst  int型 MAXN = 100005 7  
8  int型TI [MAXN]、DP [MAXN]、ヴァル[MAXN]。
9つの int型のANS;
10  
11  INT メイン(){
 12      のint T、M。
13      のscanf(" %D%dの"、&​​T&M)。
14      のためにint型 I = 1 ; I <= M Iは++ 15         scanf関数(" %D%dの"、およびTI [i]は、&ヴァル[I])。
16      のためにint型 I = 1 ; I <= M Iは++ ){
 17          のためにINT ; J <= T J = TI [I] J ++ ){
 18              - TI [I DP [J] = MAX(DP [J ] + ヴァル[I]、DP [J])。
19          }
 20      }
 21      のためのint型 I = 1 ; I <= T; iは++ 22の          ANS = MAX(ANS、DP [I])。
23      のprintf(" %d個の\ n " 、ANS)。
24      リターン 0 ;
25 }
ACコード

 

おすすめ

転載: www.cnblogs.com/New-ljx/p/11183993.html