RE求助

P1077 [NOIP2012 普及组] 摆花

以下是代码(忘记贴了emmm) ```cpp #include<bits/stdc++.h> using namespace std; int n,m,ans,cnt; int a[1100],b[1100][1100]; int dfs(int rest/*还需要摆多少盆花*/,int i/*x*/){ if(rest==0) return 1; if(i==n+1) return 0; if(rest<0) return 0; for(int j=0;j<=a[i];j++){ if(!b[rest-j][i+1]) b[rest-j][i+1]=dfs(rest-j,i+1); ans+=b[rest-j][i+1]; } return 0; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(m,1); cout<<ans<<endl; }
by _yKy @ 2019-06-17 14:48:12


@[1842932279abc](/space/show?uid=214545) 这样写的话会出现负下标吧 ```cpp if(!b[rest-j][i+1]) b[rest-j][i+1]=dfs(rest-j,i+1); ``` 万一rest-j<0呢
by Sweetness @ 2019-06-17 16:22:09


#include<bits/stdc++.h> using namespace std; int n,m,i,j,z; int a[1000000],f[10000][10000]; int main() { cin>>n>>m; f[0][0]=1; for(i=1;i<=n;i++) { cin>>a[i]; } for(i=1;i<=n;i++) { for(j=0;j<=m;j++) { for(z=0;z<=min(a[i],j);z++) { f[i][j]=(f[i][j]+f[i-1][j-z])%1000007; } } } cout<<f[n][m]; return 0; }
by 谢家林2bzllx @ 2019-06-17 20:49:50


|