求大佬帮忙解释一下背包问题main函数内循环部分
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
int w[maxn], v[maxn];
int f[maxn][maxn];
int n, W;
int main()
{
scanf("%d%d", &n, &W);
for(int i = 1; i <= n; i++)
scanf("%d%d", &v[i], &w[i]);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= W; j++)
{
f[i][j] = f[i - 1][j];
if(j >= v[i])
f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]);
}
}
printf("%d", f[n][W]);
return 0;
}