置か花(パケットのバックパック、需要プログラムの累積数)

タイトル説明

暁明の新しくオープンしたフラワーショップ、顧客を引き付けるために、彼は、花屋の前で合計ミリメートル流域の花の行を入れたいと思いました。顧客の嗜好を調査することにより、暁明は、顧客の好みの花がnnのラベルに11からnnを示しています。突き止めるの大きな順に小さいから、ラベルの種類を有する花や花の基礎を置かれたときにドアをより多くの花を表示するために、花のII a_iai POTS、同じ花一緒項の規定を超えることはできません。

テストプログラムは花がある配置の異なるプログラムの数を計算します。

入力形式

最初の行は、スペースで区切られた2つの正の整数NNとミリメートルを、含まれています。

第二行はNN整数を有し、二つの整数の間で、それぞれがそれぞれA_1、A_2のため、スペースで区切られた、...、a_na1、A2、...、。

出力フォーマット

プログラムのどのように多くの種類を示す整数。注:結果は、多くのプログラムのように、してください計画に10,000,071,000,007出力番号を法に番号を付けることがあります。

サンプル入力と出力

入力#1

2 4 
3 2

出力#1

2

説明/ヒント

[データ範囲]

データの20%を、0 <n≤8,0<m≤8,0≤a_i≤80<n≤8,0<m≤8,0≤ai≤8があります。

データの50%、0 <n≤20,0<m≤20,0≤a_i≤200<n≤20,0<m≤20,0≤ai≤20があります。

データの100%まで、0 <n≤100,0<m≤100,0≤a_i≤1000<n≤100,0<m≤100,0≤ai≤100があります。

  1. 同様のバックパックの完全なバックパックをグループ化する、その数(グループ内の)各項目ではない一つも数多く、そしていくつかの
  2. グループ内の各オブジェクトは、独立した、一つの項目は、グループ内のバックパックを完了するために各アイテムを通して従って、再循環ループに適用することができ、各群から選択されます
  3. 鉢植え2つの位置を過ごし、位置、2つの鉢植えを取り、各花のタイトルは、グループ項目は、グループとして見ることができます。[i]はi番目の位置取りの花、
  4. 再帰式:DP [J] + = DP [JK] DP [j]は、放電方式のj番目の位置を表します
#include<iostream>
using namespace std;
int main(){
	int n,m,a[102],dp[102]={0};  //DP【i】 表示 摆 i 盆花的方案  
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    dp[0]=1;
    for(int i=1;i<=n;i++){ //N种花 
    	for(int j=m;j;j--){ //摆m盆 
    		for(int k=1;k<=a[i];k++){  //第i种花可能出现的盆数 
    		   if(j>=k)dp[j]=(dp[j-k]+dp[j])%1000007;
    		   else break;
			}
		}
	}cout<<dp[m]<<endl;
	return 0;
} 

 

公開された42元の記事 ウォン称賛16 ビュー3405

おすすめ

転載: blog.csdn.net/qq_41542638/article/details/98251356