最开始直接用的
f[i][j]=max{f[i-1][j],f[i-1][j-c[i]]+w[i]}状态转移方程。
二维数组MLE(大概超了3倍)
可以对二维数组的空间复杂度优化,转换为一维数组。
#include <cstdio>
#include <cstring>
#include <iostream>
//#include <bits/stdc++.h>
using namespace std;
int c,w;
int f[13000];
int main()
{
int n,v;
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&c,&w);
for(int j =v;j>=c;j--)
{
//if(j>=c)
f[j] = max(f[j],f[j-c]+w);
//else f[i][j] = f[i-1][j];
}
}
printf("%d\n",f[v]);
return 0;
}