关于快速排序,因为MixingMilk了解了快速排序
来源:互联网 发布:得力33068 软件下载 编辑:程序博客网 时间:2024/05/09 09:41
昨天做的MixingMilk这道ACM题很头疼,想尽了一切本人力所能及之内觉得更快的方法,但最后还是以失败告终。Time Limit Exceed总是这样的结果,哭死了要。
早上起来仍然不甘心,看了一下贪心算法,觉得自己已经做到了,想想是不是因为自己的排序效率低呢?其实自我感觉排序的效率还算挺快了,之后看到了一篇相关文章,用的是快速排序,于是学习了一下,觉得效果很好。关于快速排序,在这里简单说明一下
看下面的这个应该能看懂快速排序的基本思想和解题方法
http://http://baike.baidu.com/view/115472.htm
然后对于本题的作法可以参考本人写的
#include <stdio.h>
#include <stdlib.h>
typedef struct farmer
{
int price;
int amount;
}farmer;
void QuickSort(farmer *array,int left,int right)
{
int i,j,k,l;
i=left;
j=right;
k=array[left].price;
l=array[left].amount;
while(i<j)
{
while(i<j&&k<array[j].price)
j--;
if(i<j)
{
array[i]=array[j];
i++;
}
while(i<j&&k>array[i].price)
i++;
if(i<j)
{
array[j]=array[i];
j--;
}
}
array[i].price=k;
array[i].amount=l; //这里大家一定要注意,前面的排序是覆盖式的,并不是交换,所以在最后要把第一个被覆盖的数,也就是最初的array[i]的值赋回去。
if(left<i)
QuickSort(array,left,i-1);
if(i<right)
QuickSort(array,i+1,right);
}
int main()
{
farmer fr[5000];
int n,m,i,money=0;
while(1)
{
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d %d",&fr[i].price,&fr[i].amount);
QuickSort(fr,0,m-1);
i=0;
while(n)
{
if(n>=fr[i].amount)
{
money+=fr[i].price*fr[i].amount;
n-=fr[i].amount;
}
else
{
money+=fr[i].price*n;
n=0;
}
i++;
}
printf("%d\n",money);
}
system("pause");
return 0;
}
这道题的相关代码几乎一样,我也是在彻底理解的基础上写出来的,希望对相关问题有兴趣的朋友有帮助。
最后想说的是即便是这样,最后提交上去居然也超时,神啊!!救救我吧!!!
- 关于快速排序,因为MixingMilk了解了快速排序
- 关于快速排序算法
- 关于快速排序
- 关于快速排序
- 关于快速排序qsort
- 关于快速排序算法
- 关于快速排序
- 关于快速排序
- 09 关于快速排序
- 关于快速排序
- 关于快速排序
- 关于快速排序
- 关于快速排序
- 关于快速排序
- 关于快速排序 quick sort
- 关于快速排序与归并排序
- 快速排序
- 快速排序
- Android通过手势实现图片按照指定路径移动
- mysql数据类型及mysql和oracle中的日期类型
- 技术工程师-年会(一)
- MFC在VS2010中开发ActiveX控件,设置测试容器方案
- 技术工程师-年会(二)
- 关于快速排序,因为MixingMilk了解了快速排序
- struts2 文件上传
- RMAN命令维护
- 以时间命名文件
- XCode修改公司名和作者名
- JQuery的$.ajax()调用后台方法
- Spring下的权限框架 spring security总结
- 技术工程师-年会(三)
- Javac 的逆袭