动态规划只ac了2个,不知道为什么错,求助了

P1048 [NOIP2005 普及组] 采药

#include<bits/stdc++.h> using namespace std; int t,m; int w[110],v[110],vis[110][110],ans[110][110]; int dp(int x,int y) { if(vis[x][y]==1) { return ans[x][y]; } if(x==0)return 0; if(y>=w[x]) { ans[x][y]=max(dp(x-1,y),dp(x-1,y-w[x])+v[x]); vis[x][y]=1; return ans[x][y]; } else { ans[x][y]=dp(x-1,y); vis[x][y]=1; return ans[x][y]; } } int main() { cin>>t>>m; for(int i=1;i<=m;i++) { cin>>w[i]>>v[i]; } cout<<dp(m,t); return 0; }- 1. 不知道```cpp #include<bits/stdc++.h> using namespace std; int t,m; int w[110],v[110],vis[110][110],ans[110][110]; int dp(int x,int y) { if(vis[x][y]==1) { return ans[x][y]; } if(x==0)return 0; if(y>=w[x]) { ans[x][y]=max(dp(x-1,y),dp(x-1,y-w[x])+v[x]); vis[x][y]=1; return ans[x][y]; } else { ans[x][y]=dp(x-1,y); vis[x][y]=1; return ans[x][y]; } } int main() { cin>>t>>m; for(int i=1;i<=m;i++) { cin>>w[i]>>v[i]; } cout<<dp(m,t); return 0; } ```
by zhy12dd34 @ 2024-02-04 18:34:11


@[zhy12dd34](/user/1279972) 能麻烦你做一下缩进吗,直接看不好看>.<
by HIT2023112282 @ 2024-02-05 20:55:36


懂了,数组开小了,已解决
by HIT2023112282 @ 2024-02-05 21:52:07


@[HIT2023112282](/user/1089582) 开小了 T(1≤T≤1000) 改一下即可!!!
by liuchijun @ 2024-03-09 08:58:36


@[HIT2023112282](/user/1089582) 改成int w[110],v[110],vis[110][1010],ans[110][1010];即可
by liuchijun @ 2024-03-09 09:00:32


|