#include <stdio.h>

int data[1024][2];

int main()
{
	int s, n;
	scanf("%d %d", &s, &n);
	int i;
	for(i=0; i<n; ++i)
	{
		scanf("%d %d", &data[i][0], &data[i][1]);
	}
	int temp[1][2];
	int j;
	for(i=0; i<(n-1); ++i)
	{
		for(j=i+1; j<n; ++j)
		{
			if(data[j][0]<data[i][0])
			{
				temp[0][0]=data[i][0];
				temp[0][1]=data[i][1];
				data[i][0]=data[j][0];
				data[i][1]=data[j][1];
				data[j][0]=temp[0][0];
				data[j][1]=temp[0][1];
			}
		}
	}
	for(i=0; i<n; ++i)
	{
		//printf("-------------------------------------------------------------\n");
		//printf("s=%d, data[%d][%d]=%d.\n", s, i, 0, data[i][0]);
		//printf("-------------------------------------------------------------\n");
		if(s>data[i][0])
		{
			s+=data[i][1];
		}
		else
			break;
	}
	//printf("i=%d.\n", i);
	if(i==n)
		printf("YES\n");
	else
		printf("NO\n");
	return 0;
}

  @这道题先进行升序排序,然后逐一遍历排序后的数组元素,如果被访问的数组元素符合题目条件,则继续访问下一个数组元素并对其进行判断,如此循环;如果不能则停止遍历。

12-29 12:39