急,在线等!!!
2026-03-14 20:12:35
发布于:浙江
!!!!!!我恨PE!!!!!!!
大买特买
时间限制:1000ms
内存限制:128MB
快过年了,小 k 的妈妈要开始带着他买买买了,准备年货了。
已知商场有 N 件商品,小 k 的妈妈带了 M 元钱,每一件商品有一个编号 id 和价格v 。小 k 的妈妈买东西的原则是先买价格便宜的商品,价格相同买编号较大的。
小 k 想知道:妈妈手里的钱最多能买哪几件商品?因为这关系到他什么时候可以回家,所以他想帮妈妈快速定位这些商品。
输入格式
第一行输入两个整数 N,M ,分别表示商品数量和妈妈带的钱。
第二行输入 N 个整数,依次表示每件商品的价格 v,商品的 id 按照输入顺序从 1 到 n 编号。
输出格式
输出多行,表示能买商品的编号是什么,每个商品编号占一行。
样例组
输入#1
复制
5 10
5 4 2 3 2
输出#1
复制
5
3
4
提示说明
【样例 1 解释】
妈妈会先买便宜的,价格相同买编号大的,所以会先买第五个,编号是 5 ,然后买第三个,编号是 3 ,接着会买第四个,编号是 4。
数据范围
对于所有测试数据:
测试点 N M v
1∼2 1≤N≤10
5
1≤M≤10
9
商品价格没有重复的,而且价格递增。
3∼4 1≤N≤10
5
1≤M≤10
9
商品价格递减
1∼10 1≤N≤10
5
1≤M≤10
9
1≤v≤10
4
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int p[1005], id[1005];
for (int i = 0; i < n; i++) {
cin >> p[i];
id[i] = i + 1;
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
bool apple = false;
if (p[j] > p[j + 1]) {
apple = true;
} else if (p[j] == p[j + 1] && id[j] < id[j + 1]) {
apple = true;
}
if ( apple ) {
swap(p[j], p[j + 1]);
swap(id[j], id[j + 1]);
}
}
}
int t = 0;
for (int i = 0; i < n; i++) {
if (t + p[i] <= m) {
t += p[i];
cout << id[i] << endl;
} else {
break;
}
}
return 0;
}
这里空空如也

















有帮助,赞一个