一维01背包:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct ppp
{
int w;
int v;
}data[105];
int dp[1005];
int T,m;
int OneZeroPack()
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=m;i++)
{
for(int j=T;j>=data[i].w;j--)
{
dp[j]=max(dp[j],dp[j-data[i].w]+data[i].v);
}
}
return 0;
}
int main()
{
while(cin>>T>>m)
{
for(int i=1;i<=m;i++)
cin>>data[i].w>>data[i].v;
OneZeroPack();
cout<<dp[T]<<endl;
}
return 0;
}
二维01背包:
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int w[105];//质量
int p[105];//价值
int dp[105][1005];
int main()
{
int t,m;
while(cin>>t>>m)
{
memset(dp,0,sizeof(dp));
for(int i=1; i<=m; i++)
{
cin>>w[i]>>p[i];
}
for(int i=0;i<=m;i++)
{
dp[i][0]=0;
}
for(int i=0;i<=t;i++)
{
dp[0][i]=0;
}
for(int i=1; i<=m; i++)
{
for(int j=1;j<=t;j++) //j相当于 循环背包质量
{
if(w[i]<=j)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
else
dp[i][j]=dp[i-1][j];
}
}
cout<<dp[m][t]<<endl;
}
return 0;
}
一维01背包 相对 二维既节省时间又节省空间