RT
第一段是自己写的,第二段是根据题解改的,但第一段第2 4 两个点WA了
自己的:
#include <bits/stdc++.h>
using namespace std;
struct gold
{
int value;
int wei;
double pri;
}g[103];
bool cmp(const gold& a,const gold& b)
{
return a.pri>b.pri;
}
int n,w;
double ans;
int main()
{
cin >> n >> w;
for(register int i=1;i<=n;++i)
{
cin >> g[i].wei >> g[i].value;
g[i].pri=double(g[i].value)/double(g[i].wei);
}
sort(g+1,g+n+1,cmp);
for(register int i=1;i<=n;++i)
{
if(w>=g[i].wei)
{
w-=g[i].wei;
ans+=g[i].value*1.0;
}
if(w<g[i].wei)
{
ans+=w*g[i].pri*1.0;
break;
}
}
printf("%.2lf",ans);
return 0;
}
改了之后的:
#include <bits/stdc++.h>
using namespace std;
struct gold
{
double value;
double wei;
double pri;
}g[103];
bool cmp(gold a,gold b)
{
return a.pri>b.pri;
}
int n;
double w;
double ans;
signed main()
{
cin >> n >> w;
for(register int i=1;i<=n;++i)
{
cin >> g[i].wei >> g[i].value;
g[i].pri=g[i].value/g[i].wei;
}
sort(g+1,g+n+1,cmp);
for(register int i=1;i<=n;++i)
{
if(w>=g[i].wei)
{
w-=g[i].wei;
ans+=g[i].value;
}
else
{
ans+=w*g[i].pri;
break;
}
}
printf("%.2f",ans);
return 0;
}
试了好多次,问题好像出在最后一个循环的else上,有巨佬能解释一下为什么吗?