```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