题目链接
明明是最简单的题,但是写了三十几分钟(-_-||)
#include<bits/stdc++.h>
using namespace std;
int a[52];
int b[52];
int min(int a, int b)
{
return a >= b ? b : a;
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int min_candy = 1000000001;
int candy;
for (int i = 0; i < n; i++)
{
cin >> candy;
a[i] = candy;
min_candy = min_candy >= candy ? candy : min_candy;
}
int min_orange = 1000000001;
int orange;
for (int i = 0; i < n; i++)
{
cin >> orange;
b[i] = orange;
min_orange = min_orange >= orange ? orange : min_orange;
}
long long ans = 0;
for (int i = 0; i < n; i++)
{
int min_dec = min(a[i] - min_candy, b[i] - min_orange);
// cout << a[i] + b[i] - min_candy - min_orange - min_dec << endl;
ans += a[i] + b[i] - min_candy - min_orange - min_dec;
}
cout << ans << endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int w[52];
int visit[52];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
int min = 54;
int max = 0;
int count = 0;
int maxcount = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> w[i];
min = min >= w[i] ? w[i] : min;
max = max >= w[i] ? max : w[i];
}
max = 2 * max;
for (int i = min + 1; i <= max; i++)
{
count = 0;
memset(visit, 0, sizeof(visit));
for (int j = 0; j < n; j++)
{
if (visit[j] == 1) continue;
for (int k = j + 1; k < n; k++)
{
if ((visit[k] == 0) && (w[k] + w[j] == i))
{
visit[k] = 1;
visit[j] = 1;
count++;
// cout << i << " " << j << " " << k << " " << count << endl;
// cout << w[j] + w[k] << " " << i << endl;
break;
}
}
}
if (maxcount < count)
maxcount = count;
}
cout << maxcount << endl;
}
return 0;
}
暴力求解