题解 | #合唱团#

合唱团

https://www.nowcoder.com/practice/661c49118ca241909add3a11c96408c8

//逻辑感觉还是有漏洞,但是样例过了
#include<iostream>
#include<vector>
using namespace std;
int s = 0;
void dp(const vector<long long>& a,vector<long long>& v,int k, int d,const vector<bool> &v_b1,vector<bool> &v_b2) {
    if (k == 1) {
        long long t = v[0];
        for (int i = 1; i < v.size(); i++) {
            if (v[i] > t&&v_b2[i]==false) {
                t = v[i];
            }
        }
        cout << t << endl;
        return;
    }
    s++;
    vector<long long> b(v);
    vector<bool> v_b0(v_b2);
    for (int i = s; i < a.size(); i++) {
        long long t = b[i - 1]*a[i];
        int m = i - 1;
        for (int j = i - 2; j >= i - d && j >= s-1; j--) {
            if (t < b[j]*a[i]) {
                t = b[j]*a[i];
                m = j;
            }
        }
        v_b2[i] = v_b0[m] ^ v_b1[i];
        v[i] = t;
    }
    dp(a, v, k - 1, d,v_b1,v_b2);
    return;
}
int main() {
    int n, k, d;
    cin >> n;
    vector<long long> a(n);
    vector<bool> v_b1(n,false);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        if (a[i] < 0)
        {
            v_b1[i] = true;
            a[i] = -a[i];
        }
    }
    vector<bool> v_b2(v_b1);
    vector<long long> v(a);
    cin >> k >> d;
    dp(a, v, k, d,v_b1,v_b2);
    return 0;
}

全部评论

相关推荐

就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位 >
点赞 评论 收藏
分享
06-26 10:08
门头沟学院 C++
北京Golang实习,一个月4700,吃住都不报,公司位置在海淀。请问友友怎么看呢?如果要租房的话有什么建议吗
码农索隆:租房肯定是合租了,剩下的钱,差不多够正常吃饭了,看看能不能学到东西吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务