2 条题解
-
4
思路:
先分析样例,可以发现需要优先购买单价最小的
购买时遵循两个规则:
1、如果能全部买入,全部买入
2、如果买入以后超出需求,买入需要的部分就行
题解:
#include <iostream> #include <algorithm> using namespace std; struct milk { int price,num;//price:单价,num:数量 }; milk a[5005]; //因为后面要用sort,所以先写好cmp bool cmp(milk a,milk b) { //优先取最小单价,也就是说要按价格从小到大排列 return (a.price < b.price); } int main() { int n,m; cin >> n >> m; for(int i = 0;i < m;i++) cin >> a[i].price >> a[i].num; sort(a,a + m,cmp); int ans = 0; for(int i = 0;i < m;i++) { //如果每日生产量不可以或者刚好满足需求量,也就是说可以全部买入且不超出需求 if(a[i].num <= n) { n -= a[i].num;//买入后降低需求 ans += a[i].num * a[i].price;//计算当前需要的价格 } else { ans += a[i].price * n;//计算买入所需部分需要的价格 break;//因为此时一定是满足了需求的,所以可以直接break了 } } cout << ans; return 0; }
- 1
信息
- ID
- 346
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 881
- 已通过
- 363
- 上传者