0-1背包问题的变形
#include <iostream>
using namespace::std;
using std::cout;
using std::cin;
int max(int a, int b)
{
if(a >= b)
{
return a;
}
else
{
return b;
}
}
int jdcf(int m, int n, int w[], int h[])
{
int V[n+1][m+1];
for(int i=0; i<=n; i++)
{
V[i][0]=0;
}
for(int j=0; j<=m; j++)
{
V[0][j] = 0;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(j<w[i])
{
V[i][j] = V[i-1][j];
}
else
{
V[i][j] = max(V[i-1][j], V[i-1][j-w[i]]+h[i]);
}
}
}
return V[n][m];
}
//TEMPLATE END
//APPEND BEGIN
int main()
{
int n,m;
cin >> n >> m;
int h[n],w[n];
for(int i = 1 ; i <= n ; i++ )
{
cin >> w[i] >> h[i];
}
cout << jdcf(m,n,w,h);
}