贪心算法-背包问题(C语言)
本文最后更新于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;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇