试题 算法训练 完全背包问题
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
有一個背包,容量為M。有N種物品,每種物品有其體積Wi與價值Vi。將這些物品的一部分放入背包,每種物品可以放任意多個,要求總體積不超過容量,且總價值最大。
输入格式
第一行為N, M。
之後N行,每行為Wi, Vi。
输出格式
一個數,為最大價值。
样例输入
3 20
15 16
6 6
7 5
样例输出
18
数据规模和约定
N, M<=1000。
#include<stdio.h>
#define max(x,y) (x>y?x:y)
int n,m,weight[1001],price[1001],bag[1001][1001];
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) {
scanf("%d %d",&weight[i],&price[i]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(weight[i]>j){
bag[i][j]=bag[i-1][j];
}
else{
bag[i][j]=max(bag[i][j-weight[i]]+price[i],bag[i-1][j]);
}
}
}
printf("%d",bag[n][m]);
return 0;
}