成功解决了,但是最后两个测试时间超限了,有点难解决。
#include<stdio.h>
int book[30001], A[30001];//定义两个数组,A数组存储数据,book数组标记是否已经排序
void sort(int left, int right);
int main()
{
int w, n, i, j, sum, x;
scanf("%d %d", &w,&n);
for (i = 0; i<n; i++)//循环读入数据
{
scanf("%d", &j);
A[i] = j;
book[i] = 0;
}
sort(0, n - 1);
sum = 0;
for (i = 0; i < n; i++)
{
x = 0;
for (j = n - 1; j >= 0; j--)
{
if (j == i)
continue;
if (A[i] + A[j] <= w && book[i] == 0 && book[j] == 0)
{
book[i] = 1;
book[j] = 1;
sum++;
x = 1;
break;
}
}
if (x == 0 && book[i] == 0)
{
sum++;
book[i] = 1;
}
}
printf("%d", sum);
return 0;
}
//快速排序
void sort(int left, int right)
{
int i, j, t, temp;
if (left>right)
return;
temp = A[left];
i = left;
j = right;
while (i != j)
{
while (A[j] <= temp&&i < j)
j--;
while (A[i] >= temp&&i < j)
i++;
if (i<j)
{
t = A[i];
A[i] = A[j];
A[j] = t;
}
}
A[left] = A[i];
A[i] = temp;
sort(left, i - 1);
sort(i + 1, right);
}
|