Линейные дп размещены цветы (Los Valley P1077)

Размещенные цветы

Название Описание

Сяо Мин вновь открылся цветочный магазин, чтобы привлечь клиентов, он хотел поставить ряд цветов перед флорист, в общей сложности м бассейна. Исследуя предпочтения клиентов, Сяо Мин перечисляет любимые цветы клиента п, от 1 до п наклейке. Для того , чтобы отобразить больше цветов на дверь, не может превышать положения пункта I А. горшков с цветами, одни и те же цветы вместе , когда возложили цветы и цветы основа , имеющие различные типы этикеток от малого до большого порядка найти.
Тестовая программа для расчета количества различных программ , помещенных цветы имеются.

Формат ввода

Первая строка содержит два положительных целых чисел п и т, разделенных пробелом.

Второй ряд существуют п целые числа, каждый между двумя целыми числами, разделенных пробелом, соответственно, для a_1, A_2, ..., a_n.

Формат вывода

Целое число, которое указывает на то, как много видов программ. Примечание: Результаты могут пронумеровать как много программ, пожалуйста, план 1,000,007 количества выходных по модулю.


Этот вопрос может быть трансформирован в такую ​​форму:

Прежде чем искать число т п числа видов композиции, каждое число в диапазоне от 0 до [I];

Уравнение переноса можно записать: дп [I] [J] + = дп [I-1] [JK]; (0 <= к <= а [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