问题标题: 酷町堂:1267

0
0
已解决
胡钰妍
胡钰妍
资深光能
资深光能

#include<iostream>

#include<algorithm>

using namespace std;

struct tree{

int dj,js;

}a[110000];

bool cmp(tree a,tree b){

if(a.dj!=b.dj) return a.dj<b.dj;

}

int main()

{

int w,n,ans=0;

cin>>w>>n;

for(int i=1;i<=n;i++)

{

cin>>a[i].dj;

}

for(int i=1;i<=n;i++)

{

cin>>a[i].js;

}

sort(a+1,a+1+w,cmp);

for(int i=1;i<=w;i++){

if(w>=a[i].js){

w=w-a[i].dj;

ans+=a[i].js;

}

}

cout<<ans;

return 0;

}

哪里不对?


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

排序应该是sort(a+1,a+1+n,cmp)

排序后的循环应该是

for(int i=1;i<=n;i++)

循环内部还要特判

else{
            ans+=a[i].dj*w;//不要全买
            break;
        }

 

0
汪恺恒
汪恺恒
中级启示者
中级启示者

第一个if中的语句不对

ans应该+=a[i].dj*a[i].js;

0
汪恺恒
汪恺恒
中级启示者
中级启示者

循环里改成

        if(w>=a[i].js){
            w-=a[i].js;
            ans+=a[i].dj*a[i].js;
        }else{
            ans+=a[i].dj*w;
            break;
        }

 

0
0
0
我要回答