0-1背包问题的只需把背包装满,并且价格尽量大
//0-1背包问题的只需把背包装满,并且价格尽量大
#include<bits/stdc++.h>
using namespace std;
struct Node{
int v,w,cost;
}e[50];
int main()
{
int n,m;
long long f[30000];
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=1;i<=m;i++)
{
cin>>e[i].v>>e[i].w;
e[i].cost=e[i].v*e[i].w;
}
memset(f,0,sizeof(f));//初始化不同点
for(int i=1;i<=m;i++)
{
for(int j=n;j>=e[i].v;j--)
f[j]=max(f[j],f[j-e[i].v]+e[i].cost);//状态转移方程不同点
}
cout<<f[n]<<endl;
}
}
0-1背包问题的恰好装满背包
//0-1背包问题的恰好装满背包
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,a[105];
long long f[10005];
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(f,0,sizeof(f));
f[0]=1;//初始化不同点
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
for(int j=m;j>=a[i];j--)
f[j]+=f[j-a[i]]; //状态转移方程不同点
}
cout<<f[m]<<endl;
}
}