很奇怪的20分求助
查看原帖
很奇怪的20分求助
121472
jingwenMC楼主2024/9/1 19:12

以下两个代码,一个20分(关闭O2优化,开启O2只有10分),一个100分
感觉看起来完全等价但执行效果完全不同
代码1:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,x;
    long long a,b,c;
    cin>>n>>x;
    long long arr[n+20][x+20] = {0};
    for(long long i = 1;i<=n;i++) {
        cin>>a>>b>>c;
        for(long long j = 0 ; j <= x ; j++) {
            long long p,q = 0;
            p,q = 0;
            if(j>=c) { 
                p = arr[i-1][j-c] + b;
            }
            q = arr[i-1][j] + a;
            arr[i][j] = max(p,q);
        }
    }
    cout<<arr[n][x]*5<<endl;
    return 0;
}

代码2:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,x;
    long long a,b,c;
    cin>>n>>x;
    long long arr[n+20][x+20] = {0};
    for(long long i = 1;i<=n;i++) {
        cin>>a>>b>>c;
        for(long long j = 0 ; j <= x ; j++) {
            long long p,q = 0;
            if(j>=c) arr[i][j] = max(arr[i-1][j-c] + b,arr[i-1][j] + a);
            else arr[i][j] = arr[i-1][j] + a;
        }
    }
    cout<<arr[n][x]*5<<endl;
    return 0;
}
2024/9/1 19:12
加载中...