← Back to List

2673번: 교차하지 않는 원의 현들의 최대집합 ↗

Solutions

C++14
747 B | 747 chars
#include <iostream>
using namespace std;
int N, A, B, ar[220][220], DP[220][220],M;
int main()
{
    cin >> N;
    for (int x = 0; x < N; x++)
    {
        cin >> A >> B;
        ar[A-1][B-1] = ar[B-1][A-1] = 1;
    }
    for (int x = 200; x > -1; x--)
    {
        for (int y = x + 1; y <= 200; y++)
        {
            for (int z = x; z < y; z++)
            {
                A = DP[x%100][z%100] + DP[(z + 1)%100][(y - 1)%100] + ar[x%100][y%100];
                if (A > DP[x][y])
                    DP[x][y] = A;
            }
        }
    }
    for(int x=0; x<100; x++)
    {
        for(int y=0; y<100; y++)
        {
            if(DP[x][y] > M)
            {
                M=DP[x][y];
            }
        }
    }
    cout<<M;
}