IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2019南昌-A Funny Bipartite Graph-(暴搜+剪枝) -> 正文阅读

[数据结构与算法]2019南昌-A Funny Bipartite Graph-(暴搜+剪枝)

B

题意:
就是给你两个点集,每个点集最多18个点,左边每个点会和右边某些点有连边,但是不会超过3条。左边的点i如果你链接了k条边,那么代价就是vb[i]的k次方。同时呢,会给你限制,也就是左边的点a和b不能同时被选。现在问你,如果右边的点每个点都被连接了,至少要花费多少,如果打不成输出-1。

思考:
刚开始我以为是对于左边的点,选了他就代表和他连边的右边的点全部就得到了,实际上对于边也是有选择的。所以对于每个点到底要选择那些边,如果每次都二进制枚举,会超时。而且这样还那么复杂,既然右边每个点都想被选,那么就是每个点就选一个,枚举一下每个点选择那个点。3的18次方,但是呢,加上剪枝和题目自己给的限制,就过了。
反正对于一些题目,都可以暴力的去试一试,因为数据到底强不强也不知道。

代码:

int T,n,m,k;
char va[M][M];
char cant[M][M];
int vb[N],ned[N];
int minn = inf;

vector<int > e[20];

int ksm(int a,int b)
{
	if(b==0) return 0;
	int sum = 1;
	while(b)
	{
		if(b&1) sum = sum*a;
		a = a*a;
		b >>= 1;
	}
	return sum;
}

void init()
{
	minn = inf;
	for(int i=1;i<=n;i++)
	{
		vb[i] = ned[i] = 0;
		e[i].clear();
	}
}

void dfs(int now,int sum)
{
	if(minn<=sum) return ;
	if(now>n)
	{
		minn = min(minn,sum);
		return ;
	}
	for(auto can:e[now])
	{
		int suc = 1;
		for(int i=1;i<=n;i++) if(ned[i]>=1&&cant[i][can]=='1') suc = 0;
		if(!suc) continue;
		ned[can]++;
		dfs(now+1,sum-ksm(vb[can],ned[can]-1)+ksm(vb[can],ned[can]));
		ned[can]--;
	}
}

signed main()
{
	IOS;
	cin>>T;
	while(T--)
	{
		cin>>n;
		init();
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>va[i][j];
				if(va[i][j]=='1') e[j].pb(i);
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			cin>>cant[i][j];
		}
		for(int i=1;i<=n;i++) cin>>vb[i];
		dfs(1,0);
		if(minn==inf) cout<<-1<<"\n";
		else cout<<minn<<"\n";
	}
	return 0;
}

总结:
多多试一试,不要怕什么的。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:26:28  更:2022-03-11 22:27:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:30:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码