24牛客寒假营E题解

24牛客寒假营E题解

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半小时。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值