题目描述:
1173. 0-1背包问题 - 程序设计能力实训 - ECNU Online Judgehttps://acm.ecnu.edu.cn/contest/43/problem/1173/
ac代码:
(关于01背包的讲解太多了,在这里就不做赘述,此外,开很大的数组要放到全局变量哟)
#include<iostream>
#include<cstdio>
using namespace std;
int f[25][100005];
void initialize(int a[25][100005],int n,int m)
{
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
a[i][j]=0;
}
}
}
int max(int a,int b)
{
return a>b ? a:b;
}
int main()
{
int w[25],p[25];
int T;
int n,M;
cin>>T;
while(T--){
initialize(f,25,100005);
w[0]=0;
p[0]=0;
cin>>n>>M;
for(int i=1;i<=n;i++){
cin>>w[i]>>p[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<=M;j++){
if(w[i]>j){
f[i][j]=f[i-1][j];
}else{
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+p[i]);
}
}
}
cout<<f[n][M]<<endl;
}
}