满江红,求助
查看原帖
满江红,求助
1164330
JjHh楼主2024/5/25 13:11
#include<bits/stdc++.h>
#include<bits/stdc++.h>
using namespace std;
int n,b;
int f[1<<21];
int s[22][22];
struct node{
    int k,p,a;
}e[22];

bool cmp(node a,node b){
    return a.p < b.p;
}

int lowbit(int x){
    return x & -x;
}

int count(int x){
    int cnt=0;
    for(int i=x;i;i-=lowbit(i)){
        cnt++;
    }
    return cnt;
}

int main(){
    scanf("%d%d",&n,&b);
    for(int i=1;i<=b;i++){
        scanf("%d%d%d",&e[i].k,&e[i].p,&e[i].a);
    }
    sort(e+1,e+1+b,cmp);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&s[i][j]);
        }
    }
    int maxn = 1<<n;
    for(int i=0;i<maxn;i++){
        int game = count(i);
        for(int j=1;j<=n;j++){
            if(i&(1<<(j-1))){
                f[i] = max(f[i],f[i^(1<<(j-1))]+s[j][game]);
            }
        }
        for(int j=1;j<=b;j++){
            if(e[j].k==game&&f[i]>=e[j].p)f[i]+=e[j].a;
        }
    }
    printf("%d\n",f[maxn-1]);
    return 0;
}
2024/5/25 13:11
加载中...