BUPTテニステスト試合II Bクレーン
この問題は当時私が直接裸で探したが、実は考えていたはずの15!きっとタイムアウトでしょう...
しかし、この問題は当時LGもやったので、彼は通り過ぎて、彼のコードを見て、使った状態で圧縮しました.
後で状態圧縮の論文を見て、理解して、今日更に彼のコードを見てとても分かりました==.基本的には一度写して、小さな場所を変えました.
ビット演算の状態圧縮は、すべての状態を考慮したことに相当し、この問題も2^15の状態なので、時間複雑度比N!小さくなったら、一つの状態を列挙すればいいです.
つまり2つの円を列挙して、交差するかどうかを見て、とても不思議です.2^N*Nの時間的複雑さ.
BUPTにメールを送りました.この問題は彼らのテーマのリストを追加していません...検証していませんね.の
でも正しいと思うよ~~
P.S.BUPTに問題が加わった~~~へへへ
しかし、この問題は当時LGもやったので、彼は通り過ぎて、彼のコードを見て、使った状態で圧縮しました.
後で状態圧縮の論文を見て、理解して、今日更に彼のコードを見てとても分かりました==.基本的には一度写して、小さな場所を変えました.
ビット演算の状態圧縮は、すべての状態を考慮したことに相当し、この問題も2^15の状態なので、時間複雑度比N!小さくなったら、一つの状態を列挙すればいいです.
つまり2つの円を列挙して、交差するかどうかを見て、とても不思議です.2^N*Nの時間的複雑さ.
BUPTにメールを送りました.この問題は彼らのテーマのリストを追加していません...検証していませんね.の
でも正しいと思うよ~~
P.S.BUPTに問題が加わった~~~へへへ
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <string>
#include <algorithm>
#define MID(x,y) ( ( x + y ) >> 1 )
#define L(x) ( x << 1 )
#define R(x) ( x << 1 | 1 )
#define FOR(i,s,t) for(int i=(s); i<(t); i++)
#define BUG puts("here!!!")
#define STOP system("pause")
#define file_r(x) freopen(x, "r", stdin)
#define file_w(x) freopen(x, "w", stdout)
using namespace std;
const int MAX = 20;
struct point {
int x, y, r;
void get()
{
scanf("%d%d%d", &x, &y, &r);
}
};
point p[MAX];
long long disp2p(point a,point b)
{
return (a.x - b.x)*1ll*(a.x - b.x) + (a.y - b.y)*1ll*(a.y - b.y);
}
bool inst(int x, int y)
{
return disp2p(p[y], p[x]) <= (p[y].r + p[x].r)*1ll*(p[y].r + p[x].r);
}
bool BIN(int i, int n)
{
FOR(j, 0, n)
FOR(k, j+1, n)
if( ( (1<<j) & i ) && ((1<<k) & i ) )
if( inst(j, k) ) //
return false;
return true;
}
int solve(int n)
{
int ans, mmax = 0;
FOR(i, 0, 1<<n)
{
ans = 0;
bool f = BIN(i, n);
if( f )
FOR(k, 0, n)
if( (1<<k) & i )
ans += p[k].r * p[k].r;
mmax = max(mmax, ans);
}
return mmax;
}
int main()
{
int n, ncases;
scanf("%d", &ncases);
while( ncases-- )
{
scanf("%d", &n);
FOR(i, 0, n)
p[i].get();
int ans = solve(n);
printf("%d
", ans);
}
return 0;
}