Codeforces Round #259 (Div. 1) -- Little Pony and Harmony Chest,

Source: Internet
Author: User

Codeforces Round #259 (Div. 1) -- Little Pony and Harmony Chest,

Question connection

  • Question:
    Calculate a sequence bi for n Integers of ai, so that any two numbers in the B sequence are mutually dependent, and sigma (abs (ai-bi) is the smallest, and output any B sequence.
    (1 digit ≤ DigitNMemory ≤ memory 100) (1 memory ≤ memoryAILimit ≤ Limit 30)
  • Analysis:
    First of all, it is clear that the scope of question B is not limited .... For this reason, wa has been performed many times, but it can be inferred that B must be less than or equal to 60.
    Any two numbers are mutually qualitative. That is to say, if you know the quality factor of all the previous numbers for a newly added bi, It is a satisfying situation as long as the current number does not have this quality factor. There are less than 20 Prime numbers within 60, so you can directly press DP. DP [I] [j] indicates the number of I processed. The prime factor is j (in binary format)
const int MAXN = 60;const int SIZE = 16;int ipt[110];int dp[110][1 << SIZE];int p[110][1 << SIZE];int x[110][1 << SIZE];int to[MAXN + 1];int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};map<int, int> mp;void init(){    REP(i, SIZE)        mp[prime[i]] = 1 << i;    FE(ii, 0, MAXN)    {        int n = ii, ret = 0, i;        for (i = 0; i < SIZE && prime[i] * prime[i] <= n; i++)            if (n % prime[i] == 0)            {                while (n % prime[i] == 0)                    n /= prime[i];                ret += 1 << i;            }        if (n > 1)            ret += mp[n];        to[ii] = ret;    }}int n;void dfs(int idx, int id){    if (idx >= 2)        dfs(idx - 1, p[idx][id]);    printf("%d%c", x[idx][id], idx == n ? '\n' : ' ');}int main (){    int all = 1 << SIZE;    init();    while (~RI(n))    {        FE(i, 1, n)            RI(ipt[i]);        CLR(dp, INF); dp[0][0] = 0;        FE(i, 0, n - 1)        {            FF(j, 0, all)            {                FE(jj, 0, MAXN)                {                    int v = to[jj];                    if (j & v)                        continue;                    int val = dp[i][j] + abs(jj - ipt[i + 1]);                    int& nxt = dp[i + 1][j | v];                    if (val < nxt)                    {                        nxt = val;                        p[i + 1][j | v] = j;                        x[i + 1][j | v] = jj;                    }                }            }        }        int ans = INF, id = 0;        REP(j, all)        {            if (dp[n][j] < ans)            {                ans = dp[n][j];                id = j;            }        }        dfs(n, id);    }    return 0;}





Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.