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;
}