请求帮助——购买贺卡

5. 购买贺卡

题目ID:20261必做题100分

最新提交:

Wrong Answer

70 分

历史最高:

Wrong Answer

70 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

新年快到了,楠枫打算给他的好朋友们发贺年卡,而且他已经选好了自己要购买的贺卡的样式。俗话说得好,货比三家,楠枫来到商店,看了各个商铺这种贺卡的价钱。不仅如此,楠枫还记住了每个商铺的存货量。已知楠枫打算购买 m 张贺卡,问他最少花多少钱。

输入格式

第一行两个整数 m 和 n。其中 m 表示要购买的贺卡的数量,n 表示商铺的个数。
以下 n 行,每行两个整数,分别表示该商铺这种贺卡的单价和存货量。

输出格式

仅一个数,表示楠枫花的最少钱数。

样例

Input 1

10 4
4 3
6 2
8 10
3 6

Output 1

36

数据范围

0<m、n≤10000<m、n≤1000,每个商铺贺卡单价在 1 ~100 之间,数量在 1 ~1000 之间,输入保证商铺的总存货量不少于 m

没有发现错在哪,请求帮助

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<climits>
#include<cstring>
#include<string>
#include<algorithm>
#include<functional>
using namespace std;


int main(){
	int m,n,total=0,price[105],supply[1005];//number of cards, number of stores
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>price[i]>>supply[i];
	}
	for(int i=2;i<=n;i++){
    	int j=i;
		while(j!=1){
    		if(price[j]<price[j-1]){
    			swap(price[j],price[j-1]);
    			swap(supply[j],supply[j-1]);
    			j--;
			}
			else{
				break;
			}
		}
	}
	int k=1;
	while(m>=0){
		if(supply[k]<=m){
			total=total+supply[k]*price[k];	
		}
		else{
			total=total+m*price[k];
		}
		m=m-supply[k];
		k++;
	}
	cout<<total;
	return 0;
}
1 个赞

@李欣容 你的

           if(price[j]<price[j-1]){
    			swap(price[j],price[j-1]);
    			swap(supply[j],supply[j-1]);
    			j--;
			}

确定不是:

            if(price[j]>price[j-1]){
    			swap(price[j],price[j-1]);
    			swap(supply[j],supply[j-1]);
    			j--;
			}

吗?