编辑代码

#include <iostream>
using namespace std;
int v,n,d[2000],c[50],w[50];     //d数组的下标表示容量
int main()
{
	cin >>v >>n;      //v表示容量,n表示数量 
	for (int i=1;i<=n;i++)
		cin >>w[i] >>c[i];
	for (int i=1;i<=n;i++) 
		for (int j=v;j>=w[i];j--)
            //01背包中,第二重循环要倒序,从v到w[i],倒序的原因,切勿刨根问底!
		{
			d[j]=max(d[j],d[j-w[i]]+c[i]);  //公式 
		}
	cout <<d[v]; //注意不是d[n] 
	return 0;
    }