hdu-2187
悼念512汶川大地震遇难同胞——老人是真饿了
http://acm.hdu.edu.cn/showproblem.php?pid=2187
一般算法
#include<stdio.h>
int main()
{
int T;
int m,i,j;
double per[1200],weight[1200],n;
double k,t,sum;
scanf("%d",&T);
while(T--)
{
sum=0;
scanf("%lf%d",&n,&m);
for(i=0;i<m;i++)
scanf("%lf%lf",&per[i],&weight[i]);
for(i=0;i<m;i++)
for(j=i+1;j<m;j++)
{
if(per[i]>per[j])
{
t=per[i];per[i]=per[j];per[j]=t;
k=weight[i];weight[i]=weight[j];weight[j]=k;
}
}
for(i=0;i<m;i++)
{
if(n/per[i]>weight[i])
sum+=weight[i]; 刚刚跟同学们考试的时候没做出来,怎么也没有思路,考试过后上网一看全是贪心算法,忽然觉得我跟同学们的差距在一点点的拉开
else // 还好受点启发,自己用普通的方法把它给做出来了,不然就该丢人了。。。。
{
sum+=n/per[i];
break;
}
if(n>0)
n-=per[i]*weight[i];
}
printf("%.2lf\n",sum);
}
return 0;
}
贪心算法
#include<stdlib.h>
struct sum
{
int price;
int weight;
}sum[1200];
int cmp(void const *a,void const *b)
{
struct sum *price1=(struct sum *)a;
struct sum *price2=(struct sum *)b;
return price1->price-price2->price;
}
int main()
{
int m,i,j,a;
double t,n;
scanf("%d",&a);
while(a--)
{
t=0.0;
scanf("%lf%d",&n,&m);
for(i=0;i<m;i++)
scanf("%d%d",&sum[i].price,&sum[i].weight);
qsort(sum,m,sizeof(struct sum),cmp);
for(i=0;i<m;i++)
{
if(n/(sum[i].price*1.0)>sum[i].weight)
{
t+=sum[i].weight;
// n=n-sum[i].price*sum[i].weight;
}
else
{
// if(n==0)
// break;
t+=n/(sum[i].price*1.0);
break;
}
if(n>0)
n=n-sum[i].price*sum[i].weight;
}
printf("%.2lf\n",t);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理