求一组hack数据
查看原帖
求一组hack数据
538427
czy0323楼主2023/7/11 19:01

由于某些原因,MnZn无法使用对拍,有没有大佬能给我的代码几份对拍数据?

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2005;
int n, T, use;
int a[N];
int dp[N][N], Max[N];

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, sum = 0;
    cin >> n >> T;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    sort(a + 1, a + 1 + n);
    for(int i = 1; i < n && sum < a[n]; i++){
        use++;
        sum += a[i];
    }
    if( sum >= a[n] )
        use--;
    for(int i = 1; i < n; i++)
        for(int j = 1; j <= min(i, use); j++){
            for(int k = 0; k < i; k++)
                if( dp[k][j - 1] + a[i] < a[n] )
                    dp[i][j] = max(dp[i][j], dp[k][j - 1] + a[i]);
            Max[j] = max(Max[j], dp[i][j]);
        }
    int ji = 0, ou = 0;
    for(int i = 1; i < n; i++){
        if( i & 1 )
            ji = max(Max[i], ji);
        else
            ou = max(Max[i], ou);
    }
    while( T-- ){
        int m;
        cin >> m;
        if( use == 0 ){
            if( m & 1 )
                cout << a[n] << "\n";
            else
                cout << 0 << "\n";
        }
        else if( use == 1 ){
            if( m & 1 )
                cout << a[n] << "\n";
            else
                cout << a[n] - a[1] << "\n";
        }
        else if( m - 1 <= use )
            cout << Max[m - 1] + a[n] << "\n";
        else if( m & 1 )
            cout << max(ou + a[n], ji + a[n] - a[1]) << "\n";
        else
            cout << max(ji + a[n], ou + a[n] - a[1]) << "\n";
    }
    return 0;
}
```cpp
2023/7/11 19:01
加载中...