本文最后更新于192 天前,其中的信息可能已经过时,如有错误请发送邮件到1729915388@qq.com
【题目描述】
现在有很多物品(物品数量少于100个,它们是可以分割的),已知每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
【输入说明】
每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。
【输出说明】
输出每组测试数据中背包内的物品的价值和
【输入样例】
3 15
5 10
2 8
3 9
【输出样例】
65
#include <stdio.h>
int main(void)
{
int n, s, m, i, j, k, sum, buf[9][2]={{0}};
scanf("%d %d", &s, &m);
for(i=0; i<s; i++){
scanf("%d %d", &buf[i][0], &buf[i][1]);
}
for(i=0; i<s; i++){
k=i;
for(j=i+1; j<s; j++){
if(buf[k][0] < buf[j][0]){
k=j;
}
}
if(k != i){
buf[k][0]=buf[i][0]^buf[k][0];
buf[i][0]=buf[i][0]^buf[k][0];
buf[k][0]=buf[i][0]^buf[k][0];
buf[k][1]=buf[i][1]^buf[k][1];
buf[i][1]=buf[i][1]^buf[k][1];
buf[k][1]=buf[i][1]^buf[k][1];
}
}
sum = 0;
for(i=0; i<s; i++){
if(m>buf[i][1]){
sum += (buf[i][0]*buf[i][1]);
m -= buf[i][1];
}else{
sum += (buf[i][0]*m);
break;
}
}
printf("%d\n", sum);
return 0;
}