求解第四个为什么过不了

P1478 陶陶摘苹果(升级版)

godperkz @ 2018-08-14 17:46:07

include<iostream>

include<algorithm>

using namespace std; long int k[5020][2]; int main() { int n,s,a,b,ans=0,sum=0; cin>>n>>s; cin>>a>>b; int t=a+b; for(int i=1;i<=n;i++) cin>>k[i][0]>>k[i][1]; for (int i=n;i>=2;i--)
for (int j=1;j<=n-1;j++) { if(k[j][1]>k[j+1][1]) { swap(k[j][1],k[j+1][1]); swap(k[j][0],k[j+1][0]); } } for(int i=1;i<=n;i++) cout<<k[i][0]<<" "<<k[i][1]<<" "; int i=1; while(ans<=s&&i<=n) {

    if(k[i][0]<=t)
    {
        ans+=k[i][1];
        sum++;
    }
    i++;
}
cout<<sum<<endl;

}


by 花落丶宸星 @ 2018-08-14 18:05:02

可以用MarkDown吗,让我方便看看


by YunJ @ 2018-08-14 18:10:42

#include<iostream>
#include<algorithm>
using namespace std; 
long int k[5020][2]; 
int main() { 
int n,s,a,b,ans=0,sum=0; 
cin>>n>>s; 
cin>>a>>b; 
int t=a+b; 
for(int i=1;i<=n;i++) 
    cin>>k[i][0]>>k[i][1]; 
for (int i=n;i>=2;i--)
    for (int j=1;j<=n-1;j++) 
    { if(k[j][1]>k[j+1][1]) 
        { swap(k[j][1],k[j+1][1]);          swap(k[j][0],k[j+1][0]); } 
    } 
    for(int i=1;i<=n;i++) 
    cout<<k[i][0]<<" "<<k[i][1]<<"   "; 
    int i=1; 
    while(ans<=s&&i<=n) {
    if(k[i][0]<=t)
    {
        ans+=k[i][1];
        sum++;
    }
    i++;
}
cout<<sum<<endl;
}

by YunJ @ 2018-08-14 18:11:05

@花落丶宸星 我翻译了一下


by 花落丶宸星 @ 2018-08-15 08:31:48

@yuntianming 你可以先给我讲一下你的思路吗


by YunJ @ 2018-08-15 08:39:37

@花落丶宸星 你问版主,我只翻译了一下


by 花落丶宸星 @ 2018-08-15 08:48:50

@yuntianming 我稍微加入了一点自己的思想,还有注释,你可以看看,有问题再问我。

#include<iostream>
#include<algorithm>
using namespace std;
struct pg{
    int gd,lq;
}k[5020];//使用结构体,清晰明了 
bool cmp(pg x,pg y){
    if (x.lq!=y.lq) return x.lq<y.lq;
    else return x.gd<y.gd;
}
int main(){
    int n,s,a,b,ans=0,sum=0;
    cin>>n>>s;
    cin>>a>>b;
    int t=a+b;
    for(int i=1; i<=n; i++)
        cin>>k[i].gd>>k[i].lq;
    /*for (int i=n; i>=2; i--)
        for (int j=1; j<=n-1; j++) {
            if(k[j][1]>k[j+1][1]) {
                swap(k[j][1],k[j+1][1]);
                swap(k[j][0],k[j+1][0]);
            }
        }
        */
    sort(k+1,k+n+1,cmp);//快排相对来说更快,而且c++自带stl库。 
    //for(int i=1; i<=n; i++)
    //  cout<<k[i][0]<<" "<<k[i][1]<<"   ";
    /*while(ans<=s&&i<=n) {
        if(k[i].gd<=t) {
            ans+=k[i].lq;
            sum++;
        }
        i++;
    }*/
    for(int i=1;i<=n;i++){
        if (k[i].gd<=t&&k[i].lq<=s){
            sum++;
            s-=k[i].lq;
        }
    }//我比较习惯于减法,如果你不习惯的话可以换成加法 
    cout<<sum<<endl; 
}

by YunJ @ 2018-08-15 08:49:49

@花落丶宸星 我不是版主,你应该@godperkz


by 花落丶宸星 @ 2018-08-15 08:50:27

@godperkz 刚才@错了


by 花落丶宸星 @ 2018-08-15 08:50:37

@yuntianming 对不起啊


by 花落丶宸星 @ 2018-08-15 08:50:50

@yuntianming 你们都没换头像,我看错了


| 下一页