石油大学校赛 上分 (next_permutation n!的暴力!!!比较客观相对于n^n)

发布时间 2023-03-29 00:02:39作者: VxiaohuanV

 

 思路:

  • 看到数据范围很小, 暴力, 不是n^n 暴力,而是 利用next_permutation(p+1,p+1+n); n!去实现这个东东
  • do .... while(next_permutation(p+1,p+1+n)); 牛逼, 这个只能用数组,不能结构体,于是就新建一个这个数组然后去映射就彳于了

 

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=1000010;

int p[10],a[10],b[10],c[10];
int t,n,m;
int main(){
    for(int i=1;i<=10;i++)p[i]=i;
       cin>>t;
       while(t--){
           cin>>n>>m;
           for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i];
           int max1=0;
        do{
            int num=0,time=0;
            for(int i=1;i<=n;i++){
                time+=b[p[i]];
                if(time>m)break;
                num+=round(max(a[p[i]]*0.3,a[p[i]]*(1-0.004*time)-c[p[i]]*50));
            }
            max1=max(num,max1);
        }while(next_permutation(p+1,p+n+1));
        cout<<max1<<"\n";
    }
    return 0;
}
View Code