Home+Work

来源:互联网 发布:淘宝卖家卖出后钱在哪 编辑:程序博客网 时间:2024/04/29 16:29


#include "OJ.h"
 
  
/*


输入: nPapers表示试卷的数目(1≤Papers≤20),nRemain表示剩余的时间(1≤nRemain≤10000),paper[][2]是一个Papers*2的数组,


每一行的两个元素依次为做完这一份试卷所需的时间、做完这份试卷的价值


输出: *pMaxValue为获得的最大价值
返回:
0:异常
1:计算成功返回




*/


void sort(double(*p)[2],int n)


{
double temp0,temp1;



for(int i=0;i<n;i++)
       for(int j=n-1;j>=i;j--) 
        if(p[j+1][0]>p[j][0])
{//交换记录
          temp0=p[j][0];
 temp1=p[j][1];
 p[j][0]=p[j+1][0];
 p[j][0]=p[j+1][1];
          p[j+1][0]=temp0;
 p[j+1][1]=temp1;  
         }


 
}




int GetMaxValue(int nPapers, int nRemain, int paper[][2], double* pMaxValue)
{
/* double total=nRemain;
if(nPapers<1||nPapers>20||nRemain<1||nRemain>10000||!paper)
{
  return 0;
}


double (*get)[2]=new double[nPapers][2];
for(int i=0;i<nPapers;i++)
{
  get[i][0]=paper[i][1]/(double)paper[i][0];
  get[i][1]=paper[i][1];
}


sort(get,nPapers);


while((abs(total)-0)>0.01)
{
 
}









    








return 0;
*/






if (nPapers<0 || nPapers>200 || nRemain<0 || nRemain>10000)  
    {  
        return 0;  
    }  
    *pMaxValue=0;  
    int i,index,timesum=0,timesumMax=0;  
    double temp[20]={0};  
    for (i=0;i<nPapers;i++)  
    {  
        temp[i]=(double)paper[i][1]/(double)paper[i][0];  
        timesumMax+=paper[i][0];  
    }  
    do  
    {  
        double f=0;  
        for (i=0;i<nPapers;i++)  
        {  
            if (f<temp[i])  
            {  
                f=temp[i];  
                index=i;  
            }  
        }  
        temp[index]=0;  
        timesum+=paper[index][0];  
        if (timesum<nRemain)  
        {  
            *pMaxValue+=paper[index][1];  
        }  
        else  
        {  
            double t=(double)paper[index][1]*(nRemain-timesum+paper[index][0])/(double)paper[index][0];  
            *pMaxValue+=t;  
        }  
    } while (timesum<nRemain && timesum<timesumMax);  
    return 1;  
}
0 0