求帮我看看这两份代码为什么都AC!感谢!!
查看原帖
求帮我看看这两份代码为什么都AC!感谢!!
223772
ZLYZXP楼主2021/10/22 20:55

这是我的

#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了,求教

2021/10/22 20:55
加载中...