求助……为什么输出不对

回复帖子

@冰冻罗非鱼 2020-03-26 12:15 回复
#include<bits/stdc++.h>
using namespace std;
int n,m,c[10001],a[10001];
int len = 1;
long long ans,sum;
int ma,mb;
bool vis[1001];
void dfs(int num){
    if(num == m){
        ans++;
        ans %= 1000007;
        return;
    }for(int i = 1; i <= sum; i++){
        if(vis[i] || ma > c[i]){
            continue;
        }mb = ma;
        ma = i;
        vis[i] = 1;
        dfs(num+1);
        ma = mb;
        vis[i] = 0;
    }
}
int main(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        sum+= a[i];
        for(int j = len; j <= a[i]; j++){
            c[j] = i;
            len++;
        }
    }cout << ans;
    return 0;
} 
@最牛刷题者 2020-03-26 13:14 回复 举报

您看看

#include<bits/stdc++.h>
using namespace std;
const int maxn=101,mod = 1000007;
int n,m,a[maxn],dp[maxn][maxn];
int main()
{
    cin>>n>>m;
    for(int i=1; i<=n; i++) cin>>a[i];
    dp[0][0] = 1;//dp(i,j)表示前i个数总和为j的方案数 
    for(int i=1; i<=n; i++)
    {
        for(int i2=0;i2<=m;i2++)
        {
            for(int i3=0;i3<=min(i2,a[i]);i3++)
            {
                dp[i][i2]=(dp[i][i2]+dp[i-1][i2-i3])%mod;
            }
        }
    }
    cout<<dp[n][m]<<endl;
    return 0;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。