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