题目传送门:摆花
普通dp,全WA,哪里出了问题呀,萌新不解。
代码如下:
//全WA
#include<iostream>
using namespace std;
int n,m;
int dp[105][105];//当前编号,已经摆好的花的数量 ,存储有多少种情况
int a[105];
long long ans;
int main()
{
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 k=0;k<i;k++)//前面的所有编号,用于获取之前的状态进行转移
{
for(int j=0;j<=m;j++)//枚举摆花的数量
{
//当前放多少盆
for(int t=0;t<=a[i];t++)//题目限制最多摆a[i]盆
{
if(j-t>=0)dp[i][j]+=dp[k][j-t];
}
}
}
}
for(int i=1;i<=n;i++)
ans+=dp[i][m];
cout<<ans<<endl;
return 0;
}