一道很水的贪心算法题目,思路没有任何困难,只是在敲代码的过程中还不是很熟悉,所以将代码附在这里理一遍思路。
#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;
}