24牛客寒假营E题解
题目大意:
一开始n个人已经有各自积分,经过m次比赛,问一号选手最高能排到第几名
输入描述:
t(测试组数)1-100
n个数字初始积分ai n属于2-10 ai<=100
m行比赛双方 1-10
分析:题目数据给的比较小,用dfs暴力即可求解,剪枝优化什么的也不用考虑
//诈骗题 写dfs
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,m,ran;
int a[12];
struct ty2{
int u,v;
}comp[13];
void dfs(int x){
if(x==m+1){
int r=1;
for(int i = 1;i<=n;++i) r+=(a[i]>a[1]);
ran= min(ran,r);
//for(int i = 1;i<=n;++i) cout<<a[i]<<" ";
//cout<<endl;
return;
}
int u= comp[x].u,v = comp[x].v;
// cout<<u<<" aaaa"<<v<<"\n";
a[u]+=3;
dfs(x+1);
a[u]-=3;
a[v]+=3;
dfs(x+1);
a[v]-=3;
a[u]++;
a[v]++;
dfs(x+1);
a[u]--;
a[v]--;
}
void solve(){
cin>>n>>m;
for(int i = 1;i<=n;++i){
cin>>a[i];
}
for(int i = 1;i<=m;++i){
int u,v;
cin>>u>>v;
comp[i]={u,v};
}
ran = 100;
dfs(1);
cout<<ran<<"\n";
/*
for(int i = 1;i<=m;++i){
if(comp[i].u==1||comp[i].v==1) cout<<comp[i].u<<" "<<comp[i].v<<"\n";
}*/
}
signed main(){
IOS;
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
错误原因:题目说用贪心,结果就傻傻的相信,比赛的时候太蠢了,后来自己写,因为存比赛数据索引用的是1-m,但是一开始写dfs传的参数是0导致debug半小时。