只求测试数据 C语言 编程,该如何处理

只求测试数据 C语言 编程
题目:

http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=2

这是我的代码:

C/C++ code
#include<stdio.h>
int search_max(double a[],int n)
{
    int j,max=0;
    for(j=1;j<n;j++)
        if(a[max]<a[j])
            max=j;    
    return(max);
}

int main()
{
    int M,N,max,time,i;
    int a[21][2];
    double perv[20],val;
    while(scanf("%d%d",&M,&N)!=EOF)
    {
        time=0;
        val=0;
        i=-1;
    while(++i,scanf("%d%d",&a[i][0],&a[i][1]),a[i][0]); 
    for(i=0;i<M;i++)
        perv[i]=(double)a[i][1]/a[i][0];
    i=M;
    while(i--)
    {
        max=search_max(perv,M);
        if(time+a[max][0]>N) break; 
        time+=a[max][0];
        val+=a[max][1];
        perv[max]=0;
    }
    val+=perv[max]*(N-time);
    printf("%.2f\n",val);
    }
    
    return 0;
}





提交后Runtime Error[Nonzero Return Value]

一般的数据我试过都可以

只求特殊的测试数据了。谢谢各位!

------解决方案--------------------
数据大了肯定超时.................你每次取最大都要将没有取的数据从头到尾扫一篇。。。。。。还不如开始的时候就排个序
------解决方案--------------------
RE无非几种情况,数组越界,数组下标为负的。感觉你只用了一个变量i,肯定出在i上了,建议不要为了节省这点内存,多用几个。
------解决方案--------------------
背包问题。
------解决方案--------------------
search_max函数有问题,应该这样些:

int search_max(double a[], int n) 
{
int i, max;

if (n <= 0) return -1;
max = 0;
for (i = 1; i < n; i++) {
if (a[max] < a[j]) max = j;
}
return max;
}