一道很水的贪心算法题目,思路没有任何困难,只是在敲代码的过程中还不是很熟悉,所以将代码附在这里理一遍思路。
#include <iostream> #include <stdio.h> #include <math.h> #include <algorithm> #include <string.h> using namespace std; struct node { int x,y; }a[100]; bool cmp(node p, node q) { return p.x>q.x; } int main () { int n,m; while(scanf("%d",&n)&&n) { int sum=0; scanf("%d",&m); for(int i=0; i<m; i++) { scanf("%d %d",&a[i].x,&a[i].y); } sort(a,a+m,cmp); for(int i=0; i<m; i++) { if(n>a[i].y) { n-=a[i].y; sum+=a[i].x*a[i].y; } else { sum+=a[i].x*n; break; }//关键是不需要加while(n>0) } printf("%d\n",sum); } return 0; }