1 条题解

  • 0
    @ 2026-2-1 15:39:41
    #include <bits/stdc++.h>
    using namespace std;
    
    // 定义结构体存储单价和数量,j-单价,l-数量
    struct s{
    	int j,l;
    };
    
    // 自定义比较函数,按单价升序排序
    bool cmp(s a,s b){
    	return a.j<b.j;
    }
    
    int main() {
        int  m,n; 
        cin>>m>>n; // [1] 输入需要的总数量m、物品种类数n
    	s arr[n]; // [2] 定义数组存储所有物品的单价和数量信息
    	// [3] 循环输入每个物品的单价和数量
    	for(int i=0;i<n;i++)
    		cin>>arr[i].j>>arr[i].l;
    	sort(arr,arr+n,cmp); // [4] 按单价从小到大排序,实现贪心策略
    	
    	int sum=0; // [5] 初始化总花费/总价值为0
    	// [6] 贪心选取:从单价最低的开始选取,直到满足总数量需求
    	for(int i=0;;i++){
    		// 剩余需求数量大于当前物品的数量,全部选取
    		if(m>=arr[i].l){
    			sum+=arr[i].j*arr[i].l;
    			m-=arr[i].l;
    		}else{
    			// 剩余需求数量不足,选取剩余数量即可
    			sum+=arr[i].j*m;
    			m=0;
    			break;
    		}
    	}
    	cout<<sum; // [7] 输出最终总花费/总价值
        return 0;
    }
    
    • 1

    信息

    ID
    1025
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    4
    已通过
    2
    上传者