栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2288 Islands and Bridges

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2288 Islands and Bridges

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;#define N 13#define M 8192int f[M][N][N];ll g[M][N][N];int a[N][N];int v[N];int t, n, m;void dp(){    if (n == 1)    {        cout << v[0] << " " << 1 << endl;        return ;    }    memset(f, 0, sizeof(f));    memset(g, 0, sizeof(g));    for (int i = 0; i < n; ++i)    {        f[1 << i][i][i] = v[i];        g[1 << i][i][i] = 1;    }    m = (1 << n) - 1;    for (int s = 0; s < m; ++s)        for (int i = 0; 1 << i <= s; ++i) if ((s >> i) & 1)     for (int j = 0; 1 << j <= s; ++j)         if (((s >> j) & 1) && f[s][i][j])  for (int k = 0; k < n; ++k)      if (!((s >> k) & 1) && a[j][k])      {          int temp = f[s][i][j] + v[k] + v[j] * v[k];          if (i != j && a[i][k])   temp += v[i] * v[j] * v[k];          int ss = s + (1 << k);          if (temp > f[ss][j][k])          {   f[ss][j][k] = temp;   g[ss][j][k] = g[s][i][j];          }          else if (temp == f[ss][j][k])          {   g[ss][j][k] += g[s][i][j];          }      }    int ans = 0;    ll ans2 = 0;    for (int i = 0; i < n; ++i)        for (int j = 0; j < n; ++j) if (f[m][i][j] > ans) {     ans = f[m][i][j];     ans2 = g[m][i][j]; } else if (f[m][i][j] == ans) {     ans2 += g[m][i][j]; }    cout << ans << " " << ans2 / 2 << endl;}int main(){    ios::sync_with_stdio(0);    scanf("%d", &t);    while (t--)    {        memset(a, 0, sizeof(a));        scanf("%d%d", &n, &m);        for (int i = 0; i < n; ++i) scanf("%d", &v[i]);        while (m--)        { int x, y; scanf("%d%d", &x, &y); --x, --y; a[x][y] = a[y][x] = 1;        }        dp();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号