天天看点

51 nod 1191 消灭兔子

            切完之前那么最大奖励就来做的这个,思路是一样的= =,直接上代码了

#include <bits/stdc++.h>

using namespace std;

const int manx = 1e5+10;

int hp[manx];

struct fuck{

int val;

int spend;

}cnm[manx];

struct cmp

{

bool operator() (int x,int y)

{

return x>y;

}

};

bool cmp1(fuck a,fuck b)

{

return a.val<b.val;

};

priority_queue<int ,vector<int>, greater < int > >q;

int main() {

int n,m;

scanf("%d%d",&n,&m);

for(int i = 0;i<n;i++)

{

scanf("%d",&hp[i]);

}

for(int i = 0;i<m;i++)

{

scanf("%d%d",&cnm[i].val,&cnm[i].spend);

}

sort(hp,hp+n);

sort(cnm,cnm+m,cmp1);

int ans = 0;

int j = m-1;

bool flag=true;

for(int i = n-1;i>=0;i--)

{

while(j>=0&&cnm[j].val>=hp[i])

{

q.push(cnm[j].spend);

j--;

}

if(q.empty()){

flag=false;break;

}

// temp = q.top();

ans+=q.top();

q.pop();

}

if(flag)printf("%d

",ans);

else printf("No Solution

");

return 0;

}