P1077 摆花
思路
dp[i][ j] = dp[i-1][ j] + dp[i-1][ j-1] + …… + dp[i-1][ j-min(ai , j)]。比较陌生的状态转移,求解当前状态需要循环,同时初始化需要多加注意。
代码
#include<iostream>
#define MAXN 1000007
using namespace std;
int n, m, dp[110][110], a[110];
int main(void)
{
dp[0][0] = 1;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= m; j++)
{
for (int k = 0; k <= min(a[i], j); k++)
{
dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MAXN;
}
}
}
cout << dp[n][m];
return 0;
}

浙公网安备 33010602011771号