01背包问题
滚动数组优化
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int b[100010];
int dp[100010];
int main()
{
int m, n;
cin >> m >> n;
for(int i = 1; i <= n; i ++)
{
scanf("%d%d", &a[i], &b[i]);
}
for(int i = 1; i <= n; i ++)
{
for(int j = m; j >= 0; j --)
{
if(j - a[i] >= 0)
{
dp[j] = max(dp[j], dp[j - a[i]] + b[i]);
}
}
}
int mx = 0;
for(int i = 0; i <= m; i ++)
{
mx = max(mx, dp[i]);
}
printf("%d\n", mx);
return 0;
}
其实数塔问题也能使用滚动数组优化哦~