Islands and Bridges 题解

Islands and Bridges

Description

给定一些岛屿和一些连接岛屿的桥梁,大家都知道汉密尔顿路是访问每个岛屿一次的路线,在我们这个地图中,每个岛屿有个正整数的权值,表示这个岛屿的观赏价值。假设一共有N个岛屿,用Vi表示岛屿Ci的价值,汉密尔顿路C1C2…Cn的价值是以下三部分的总和:
(1)所有岛屿的价值之和;
(2)对于路径中相邻的两个岛屿CiCi+1,把两个岛屿的价值之积加到总价值中;
(3)路径中连续三个岛屿CiCi+1Ci+2,如果Ci与Ci+2有桥直接相连,则把这三个岛屿价值之积加到总价值中。
要求计算汉密尔顿路最大的价值以及方案数。

Input

输入第一行是一个整数Q(Q<=20),表示测试数据的数量。每个测试数据第一行输入两个整数N和M,分别表示岛屿数和桥梁数,接下来一行包含N个正整数,第i个数表示Vi,每个数不超过100,最后M行,每行两个数X,Y,表示岛X和岛Y之间有一座桥直接相连,桥是双向的,岛屿编号为1到N(N<=13)

Output

对于每个测试数据,输出一行,两个整数,第一个数表示最大价值,第二个数表示方案数,如果不存在汉密尔顿路径,输出“0 0”
注意:一条路径可以反着走,我们认为这两条路径是同一条路径。

Sample Input

2
3 3
2 2 2
1 2
2 3
3 1
4 6
1 2 3 4
1 2
1 3
1 4
2 3
2 4
3 4

Sample Output

22 3
69 1

题解

emmmmmm这题只有一个测试点,不成功便成仁
老套路了, N ≤ 13 N≤13 N13的数据用ass想都知道是状压, 根据题目统计答案的规则,我们需要记录上一个和上上个走到的点,所以我们设 f [ s ] [ i ] [ j ] f[s][i][j] f[s][i][j]表示当前走过点的状态为 s s s(1表示走过,0表示没走过),上一个走到的是点 i i i,上上个走到的是点 j j j之后时最大的总价值是多少,于是我们就可以先预处理出经过两个点的状态,然后枚举每一个状态暴力DP转移就行了
至于统计方案数也很简单,设一个 g [ s ] [ i ] [ j ] g[s][i][j] g[s][i][j]表示在 f [ s ] [ i ] [ j ] f[s][i][j] f[s][i][j]情况下的方案数,转移时只要判断一下有没有大于原来的 f f f,如果大于则

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值