这是我的
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ri register int
#define ll long long
using namespace std;
const ll N = 105;
const ll mod = 1000007;
template <class T> void read(T&x){
x = 0;
int w = 0;
char g = getchar();
while(!isdigit(g)){
w = (g == '-');
g = getchar();
}
while(isdigit(g)){
x = (x << 3) + (x << 1) + (g xor 48);
g = getchar();
}
x = w?-x:x;
return;
}
ll n,m,a[N],dp[N][N];
int main(){
read(n),read(m);
for(ri i = 1; i <= n; i++)
read(a[i]);
dp[0][0] = 1;
for(ri i = 1; i <= n; i++)
for(ll j = m; j >= 0; j--)
for(ri k = 0; k <= min(a[i],j); k++)
dp[i][j] = (dp[i][j] + dp[i-1][j-k]) % mod;
cout << dp[n][m];
return 0;
}
这是第一份题解的Dp
#include<bits/stdc++.h>
using namespace std;
const int maxn=105, mod = 1000007;
int n, m, a[maxn], f[maxn][maxn];
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++) cin>>a[i];
f[0][0] = 1;
for(int i=1; i<=n; i++)
for(int j=0; j<=m; j++)
for(int k=0; k<=min(j, a[i]); k++)
f[i][j] = (f[i][j] + f[i-1][j-k])%mod;
cout<<f[n][m]<<endl;
return 0;
}
我仔细看了看发现我和他在第二个循环的遍历顺序不一样,但我AC了,我交了一边他的,也AC了,求教