九十分求帮助

P1060 [NOIP2006 普及组] 开心的金明

```cpp #include<iostream> #include<algorithm> using namespace std; int n, m, dp[30010]; int main() { cin >> n >> m; int i, j, v, p; for (i = 1; i <= m; i++) { cin >> v >> p; for (j = n; j >= v; j--) dp[j] = max(dp[j], dp[j - v] + v*p); } cout << dp[n]; return 0; } ``` AC代码,你比较下吧 还有就是最好能写一维就写一维,优化下空间
by 公元某年的猫 @ 2017-10-03 14:35:01


楼主数组开小了吧 ```cpp #include<iostream> using namespace std; const int MAXM=26,MAXN=30001; int n,m,v[MAXM],p[MAXM]; int dp[MAXN]; int main(){ cin>>n>>m; for(int i=1;i<=m;++i){ cin>>v[i]>>p[i]; p[i]*=v[i]; } for(int i=0;i<=n;++i) dp[i]=0; for(int i=1;i<=m;++i) for(int j=n;j>=v[i];--j) dp[j]=max(dp[j],dp[j-v[i]]+p[i]); cout<<dp[n]; return 0; } 顺便贴出本人代码 ```
by stationofldyc @ 2017-10-04 23:36:44


```cpp #include<bits/stdc++.h> using namespace std; int main() { int n,c; int w[1001]; int v[1001]; int f[1001][5000]; void read() { int i,j,k; cin>>n; for(i=1;i<=n;i++) cin>>w[i]; for(i=1;i<=n;i++) cin>>v[i]; cin>>c; for(i=1;i<=n;i++) for(j=w[i];j<=c;j++) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]); cout<<f[n][c]<<endl; } return 0; } 本人用的是二维数组 ```
by ‘装逼之王’ @ 2017-10-29 20:21:23


|