Avito Code Challenge 2018 D

2498 단어 dpcf
제목 전달: 숫자 한 줄을 드리겠습니다. 숫자를 k단으로 나누어 주고, 단락마다 화합을 구하고, 단락마다 & 의 최대치를 구하라고 합니다.문제풀이: dp[i][j]를 표시로 하고 1은 전 j 개수를 i단으로 나누어 현재 요구를 충족시키는 것을 의미한다(즉 현재 위치는 1).
#include
#define ll long long
using namespace std;
bool dp[55][55];
int n,k;
int main()
{
    ll a[55];
    cin>>n>>k;
    for(int i=0; icin>>a[i];
    ll sum,res=0;
    for(int i=60; i>=0; i--)
    {
        memset(dp,false,sizeof dp);
        dp[0][0]=true;

        for(int j=0; jfor(int l=0; lif(dp[j][l])
                {
                    sum=0;
                    for(int d=l; dif((sum&res)==res)
                        {
                            if(sum&((ll)1<1][d+1]=true;
                        }
                    }
                }
            }
        }
        if(dp[k][n])
            res|=((ll)1<cout<return 0;
}

좋은 웹페이지 즐겨찾기