L i n k Link Link
l u o g u P 1077 luogu\ P1077 luogu P1077
D e s c r i p t i o n Description Description
S a m p l e Sample Sample I n p u t Input Input
2 4
3 2
S a m p l e Sample Sample O u t p u t Output Output
2
H i n t Hint Hint
T r a i n Train Train o f of of T h o u g h t Thought Thought
DP
设
f
i
,
j
f_{i,j}
fi,j为前i种花种了j盆的方案数
f
i
,
j
=
s
u
m
(
f
i
−
1
,
j
−
k
)
f_{i, j} =sum(f_{i - 1, j - k})
fi,j=sum(fi−1,j−k)
需要注意的是,
j
j
j和
k
k
k可能为0
记得%
C o d e Code Code
#include<cstdio>
#include<iostream>
using namespace std;
int n, m, a[101], f[101][101];
int main()
{
f[0][0] = 1;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
for (int j = 0; j <= m; j++)
for (int k = 0; k <= a[i]; k++)
if (j - k >= 0) f[i][j] = (f[i - 1][j - k] + f[i][j]) % 1000007;
else break;
}
printf("%d", f[n][m]);
return 0;
}