01 背包不可达一维一维的一定要从头遍历进行分类 二维可以从f[i]因为他在继承
include <bits/stdc++.h>
using namespace std;
int j[1005];
int f[1005];
int dp[1005];
int main() {
int m, n;
while (cin >> m >> n) {
if (m == -1 && n == -1) break;
memset(dp,-1,sizeof(dp));
for (int i = 1; i <= n; i++) {
cin >> j[i] >> f[i];
}
dp[0]=0;
for(int i=1;i<=n;i++)
{
for(int jj=m;jj>=f[i];jj--)
{
if(dp[jj-f[i]]!=-1)
{
dp[jj]=max(dp[jj],dp[jj-f[i]]+j[i]);
}
}
}
cout<<dp[m]<<endl;
}
return 0;
}

浙公网安备 33010602011771号