リニアDP置か花(ロス・バレーP1077)

置か花

タイトル説明

暁明の新しくオープンしたフラワーショップは、顧客を引き付けるために、彼は、花屋の前でメートルの盆地の合計を花の行を入れたいと思いました。顧客の嗜好を調査することにより、暁明は1からn個のラベルに、nは、顧客の好みの花を示しています。ドアでより多くの花を表示するために、見つけるの大きな順に小さいから、ラベルの種類を有する花や花の基礎を置かれたとき、私は一緒に花の鉢、同じ花を愛の規定を超えることはできません。
テストプログラムは花がある配置の異なるプログラムの数を計算します。

入力形式

最初の行は、スペースで区切られた2つの正の整数nおよびmが、含まれています。

第二行がありnは整数では、二つの整数の間のそれぞれは、それぞれA_1、A_2、...、A_Nため、スペースで区切られました。

出力フォーマット

プログラムのどのように多くの種類を示す整数。注:結果は、多くのプログラムのように、してください計画1000007への出力を法の数を数えることがあります。


この質問は、このようなA形式に変換することができます。

組成物の種類のn個の数mを求める前に、0から[I]の範囲内の各数字;

伝達方程式を書くことができる:DP [I] [J] + = DP [I-1] [JK](0 <= K <= [I])

コード:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=100010;
const int M=2000100;
const LL mod=1000007;
int a[110];
LL dp[110][110];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	dp[0][0]=1;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
			for(int k=0;k<=a[i];k++){
				if(j>=k) (dp[i][j]+=dp[i-1][j-k])%=mod;
			}
		}
	}
	cout<<dp[n][m]<<endl;
	return 0;
}

公開された264元の記事 ウォン称賛46 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_44291254/article/details/105199857
おすすめ