CF507A Amr and Music 题解

Content

有一个容量为 \(k\) 的背包。有 \(n\) 个物品,第 \(i\) 个物品的体积为 \(c_i\)。请求出背包最多能够装下的物品的个数,并输出任意一个方案。

数据范围:\(1\leqslant n,a_i\leqslant 100,0\leqslant k\leqslant 10^4\)

Solution

我们很容易想到这样一个贪心的思路:尽量往背包里面塞体积小的物品,这样就保证让能够装下的物品最多。所以,我们按照每个物品的体积从小到大排序,然后依次塞进去,直到塞不进去了为止。注意应该先统计个数,再去统计各个物品的编号。

Code

int n, k, ans;
struct item {
	int val, id;
	bool operator < (const item& ss) const {return val < ss.val;}
}a[107];

int main() {
	getint(n), getint(k);
	_for(i, 1, n) {getint(a[i].val); a[i].id = i;}
	sort(a + 1, a + n + 1);
	_for(i, 1, n) {
		if(k - a[i].val >= 0) k -= a[i].val, ans++;
		else break;
	}
	writeint(ans), puts("");
	_for(i, 1, ans) {
		writeint(a[i].id);
		if(i != ans) putchar(' ');
	}
	return 0;
}
posted @ 2021-12-16 15:08  Eason_AC  阅读(34)  评论(0)    收藏  举报