Размещенные цветы
Название Описание
Сяо Мин вновь открылся цветочный магазин, чтобы привлечь клиентов, он хотел поставить ряд цветов перед флорист, в общей сложности м бассейна. Исследуя предпочтения клиентов, Сяо Мин перечисляет любимые цветы клиента п, от 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;
}