比赛 2026.8.28 评测结果 TTTTTEEEEE
题目名称 一周一次买下同班同学的那些事 最终得分 0
用户昵称 wmlsxzh 运行时间 11.244 s
代码语言 C++ 内存使用 26.00 MiB
提交时间 2026-08-28 11:23:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 5005
vector<int> ans;
vector<int> cur;
vector<int> posi;
int t,a[MAXN],n,fsum=0,csum=0;
bool vis[MAXN];
void dfs(int k,bool change,vector<int> posi){
    if(change){
        posi.clear();
        csum = 0;
        for(int i=1;i<=n;++i){
            csum+=a[i];
            if(a[i]>0)posi.push_back(i);
        }
    }
    if(csum>fsum){
        ans = cur;
        fsum = csum;
    }
    if(k == n||posi.empty())return;
    if(!(k == n-1 && cur.empty())){
        dfs(k+1,false,posi);
    }
    for(auto x:posi){
        if(vis[x])continue;
        cur.push_back(x);
        vis[x]=true;
        for(int i=1;i<=x;++i){
            a[i] = -a[i];
        }
        dfs(k+1,true,posi);
        for(int i=1;i<=x;++i){
            a[i] = -a[i];
        }
        cur.pop_back();
        vis[x] = false;
    }
}
int main(){
    freopen("bought.in","r",stdin);
    freopen("bought.out","w",stdout);
    scanf("%d\n",&t);
    while(t--){
        scanf("%d\n",&n);
        fsum = 0;csum = 0;
        ans.clear();cur.clear();posi.clear();
        for(int i=1;i<=n;++i){
            scanf("%d",&a[i]);
            fsum+=a[i];
            csum+=a[i];
            if(a[i]>0)posi.push_back(i);
        }
        if(posi.empty() || (int)posi.size()==n){
            printf("0\n\n");
            continue;
        }
        dfs(0,false,posi);
        printf("%d\n",(int)ans.size());
        for(int i:ans){
            printf("%d ",i);
        }
        printf("\n");
    }
    return 0;
}