由于某些原因,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