• weight(搜索对象的选取)


    题目链接:

    就是大概这么个东西

    根据题意,我们可以清楚的知道:这个题我不会,这个题需要先将2n个数进行排序

    这样每对于一个小的前(后)缀和总会在队列最前或队列最后

    设这个数为k

    那么判断总的Sum(n)-k是否在集合之中就可以啦

    当然,如果不在集合之中,我们就要重新的回溯一遍

    直到成功

    PS:若k既满足于前缀和又满足于后缀和,先放在前面

    因为

    下放代码:

    //weight
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 100005;
    int n, s[N], m, a[N], t[N], flag, ans[N], all;
    
    inline int read()
    {
        int x = 0, y = 1;
        char z = getchar();
        while (z < '0' || z > '9')
        {
            if (z == '-')
            {
                y = -1;
                z = getchar();
            }
        }
        while (z >= '0' && x <= '9')
        {
            x = (x << 3) + (x << 1) + z - '0';
            z = getchar();
        }
    }
    
    inline void dfs(int l, int r, int now, int sum1, int sum2)
    {
        if (flag)
            return;
        if (l == r)
        {
            int w3 = all - sum1 - sum2;
            if (t[w3])
            {
                ans[l] = w3;
                flag = 1;
            }
            return;
        }
        int w1 = s[now] - sum1;
        if (w1 <= 500 && w1 >= 1 && t[w1]) //属于前缀
        {
            ans[l] = w1;
            dfs(l + 1, r, now + 1, s[now], sum2);
        }
        if (flag)
            return;
        int w2 = s[now] - sum2;
        if (w2 <= 500 && w2 >= 1 && t[w2]) //属于后缀
        {
            ans[r] = w2;
            dfs(l, r - 1, now + 1, sum1, s[now]);
        }
    }
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= 2 * n; i++) //前后缀和
            scanf("%d", &s[i]);
        scanf("%d", &m);
        for (int i = 1; i <= m; i++)
        {
            scanf("%d", &a[i]);
            t[a[i]] = 1;
        }
        sort(s + 1, s + 2 * n + 1);
        all = s[2 * n];
        dfs(1, n, 1, 0, 0);
        for (int i = 1; i <= n; i++)
            printf("%d ", ans[i]);
        return 0;
    }

    Fixed on 2020.1.7

    emmm,这个好像只能拿90Pts(无所谓了,反正思路差不多)

  • 相关阅读:
    R语言 dbWriteTable 写入数据库 为空和乱码问题
    data.table进阶
    简述ODS,和数据仓库做简单的比较
    深入ff and ffbase
    R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)
    基于mondrain 的原理纠正特殊指标值
    基于mondrian聚合表的R计算olap开发
    dplyr快速入门
    R中的data.table 快速上手入门
    删除pentaho用户和用户文件夹
  • 原文地址:https://www.cnblogs.com/gongcheng456/p/11007401.html
Copyright © 2020-2023  润新知