简单的贪心,将cent从小到大排序.
/* ID:wang9621 PROG:milk LANG:C++ */ #include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct edge { int cent; int unit; }; edge per[5005]; bool cmp(edge a,edge b) { return a.cent<b.cent; } int main() { freopen("milk.in","r",stdin); freopen("milk.out","w",stdout); int n,m; scanf("%d %d",&n,&m); for(int i = 1; i<=m; i++) { scanf("%d %d",&per[i].cent,&per[i].unit); } sort(per+1,per+m+1,cmp); int sum = 0; for(int i = 1; i<=m; i++) { if(n>=per[i].unit) { sum += per[i].cent*per[i].unit; n -= per[i].unit; } else if(n>0) { sum += n*per[i].cent; n = 0; } } printf("%d ",sum); return 0; }