10分求助!!!
查看原帖
10分求助!!!
1148832
LabmemNo_012LzTopic楼主2024/9/23 20:21
#include<iostream>
using namespace std;

#define f 1000007

int main()
{
	//状态转移方程:f(i,j)=f(i-1,j-0)+f(i-1,j-1)+...+f(i-1,j-a[i]);
	//i:种前i种花
	//j:共种就j朵花
	//第i朵花种几朵

	int n, m, a[105] = { 0 }, dp[105][105] = { 0 };

	//输入
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];

		if (a[i] == 0)//保证a[i]大于0
		{
			i--;
			n--;
		}
	}

	for (int i = 0; i <= a[1]; i++)dp[1][i] = 1;//初始化

	for (int i = 2; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			for (int z = 0; z <= a[i]; z++)
			{
				if (j - z >= 0)
				{
					dp[i][j] += dp[i - 1][j - z];//第i种花种z朵
					dp[i][j] = dp[i][j] % f;//取模
				}
				else break;
			}
		}
	}

	cout << dp[n][m] << endl;//输出
	return 0;
}
2024/9/23 20:21
加载中...