zoukankan      html  css  js  c++  java
  • hdu 3091 Necklace 状态压缩dp *******

    Necklace

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)
    Total Submission(s): 522    Accepted Submission(s): 168


    Problem Description
    One day , Partychen gets several beads , he wants to make these beads a necklace . But not every beads can link to each other, every bead should link to some particular bead(s). Now , Partychen wants to know how many kinds of necklace he can make.
     
    Input
    It consists of multi-case .
    Every case start with two integers N,M ( 1<=N<=18,M<=N*N )
    The followed M lines contains two integers a,b ( 1<=a,b<=N ) which means the ath bead and the bth bead are able to be linked.
     
    Output
    An integer , which means the number of kinds that the necklace could be.
     
    Sample Input
    3 3
    1 2
    1 3
    2 3
    Sample Output
    2
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<vector>
     6 using namespace std;
     7 
     8 int n,m;
     9 vector <int> a[20];
    10 long long dp[(1<<18)+2][20];
    11 void make_ini()
    12 {
    13     int i,j;
    14     int s,r,u;
    15     memset(dp,0,sizeof(dp));
    16     dp[1][0]=1;
    17     for(i=1;i<(1<<n);i++)
    18     {
    19         for(j=0;j<n;j++)
    20         {
    21             if(dp[i][j]==0)continue;
    22             for(s=0;s<a[j].size();s++)
    23             {
    24                 u=a[j][s];
    25                 if( (i&(1<<u))>0 ) continue;
    26                 r=( i | (1<<u) );
    27                 dp[r][u]+=dp[i][j];
    28             }
    29         }
    30     }
    31     long long Sum=0;
    32     for(i=0;i<a[0].size();i++)
    33         Sum+=dp[(1<<n)-1][a[0][i]];
    34         printf("%I64d
    ",Sum);
    35 }
    36 int main()
    37 {
    38     int i,x,y;
    39     while(scanf("%d%d",&n,&m)>0)
    40     {
    41         for(i=0;i<n;i++)
    42         {
    43             a[i].clear();
    44         }
    45         for(i=1;i<=m;i++)
    46         {
    47             scanf("%d%d",&x,&y);
    48             x--;
    49             y--;
    50             a[x].push_back(y);
    51             a[y].push_back(x);
    52         }
    53         make_ini();
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    Zend Framework 项目 index.php 的问题
    《MySQL 必知必会》读书总结
    phpstorm 无法格式化代码
    Windows 下 zip 版的 MySQL 的安装
    配置Windows下的PHP开发环境
    phpstorm 激活服务器
    《DOM Scripting》
    《JavaScript高级程序设计》
    sql 查找所有已经分配部门的员工
    sql 表的连接 inner join、full join、left join、right join、natural join
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3434166.html
Copyright © 2011-2022 走看看