红黄蓝筷子求调!TLE0 分

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m, k, ans;
ll a[1005], b[1005], c[1005];
ll dp[200][200][200];
int main(){
	cin >> n >> m >> k;
	for (int i = 1;i <= n;++ i) cin >> a[i];
	for (int i = 1;i <= m;++ i) cin >> b[i];
	for (int i = 1;i <= k;++ i) cin >> c[i];
	sort(a + 1,a + n + 1);
	sort(b + 1,b + n + 1);
	sort(c + 1,c + n + 1);
	
	for (int i = 0;i <= n;++ i){
		for (int j = 0;j <= m;++ j){
			for (int t = 0;t <= k;++ t){
				if (i & j)
					dp[i][j][t] = max(dp[i][j][t], dp[i - 1][j - 1][t] + a[i] * b[j]);
				if (i & t)
					dp[i][j][t] = max(dp[i][j][t], dp[i - 1][j][t - 1] + a[i] * c[t]);
				if (j & t)
					dp[i][j][t] = max(dp[i][j][t], dp[i][j - 1][t - 1] + b[j] * c[t]);
				ans = max(ans, dp[i][j][t]);				
					
			}
		}
	}
	cout << ans;
	return 0;
}

image

数组开大后

题面

A了