UVALive 7352 Dance Recital

题意:

有n种舞蹈要跳 每种舞蹈需要每一行字符串所对应的那些人

如果一个人连着跳两个舞蹈 那么需要一个quick change

问需要的最少quick changes是多少

思路:

假期的题 又拿出来做一遍……

范围很感人10*26 这不暴力搜一发还等啥呢……

  1 /* ***********************************************
  2 Author        :SunYuefeng
  3 Created Time  :2016/10/16 20:17:34
  4 File Name     :A.cpp
  5 ************************************************ */
  6
  7 #include <stdio.h>
  8 #include <string.h>
  9 #include <iostream>
 10 #include <algorithm>
 11 #include <vector>
 12 #include <queue>
 13 #include <set>
 14 #include <map>
 15 #include <string>
 16 #include <math.h>
 17 #include <stdlib.h>
 18 #include <time.h>
 19 #define M(a,b) memset(a,b,sizeof(a))
 20 using namespace std;
 21 const int maxn=27;
 22 const int inf=0x3f3f3f3f;
 23
 24 int n,sum,ans;
 25
 26 char dance[15][maxn];
 27 int match[maxn][maxn];
 28 int way[15];
 29 bool vis[maxn];
 30
 31
 32 int solve(int x,int y){ //看两个舞蹈有几个人重复了
 33     int sum=0;
 34     int lenx=strlen(dance[x]);
 35     int leny=strlen(dance[y]);
 36     for(int i=0;i<lenx;i++)
 37         for(int j=0;j<leny;j++)
 38             sum+=(dance[x][i]==dance[y][j]);
 39     return sum;
 40 }
 41
 42 void dfs(int x){ //强行遍历
 43     if(x>n){
 44         if(sum<ans) ans=sum;
 45         return ;
 46     }
 47     for(int i=1;i<=n;i++){ //遍历部分
 48         if(!vis[i]){
 49             way[x]=i;
 50             vis[i]=true;
 51             sum+=match[way[x-1]][i];
 52             dfs(x+1);
 53             sum-=match[way[x-1]][i];
 54             vis[i]=false;
 55         }
 56     }
 57 }
 58
 59 int main()
 60 {
 61     //freopen("in.txt","r",stdin);
 62     //freopen("out.txt","w",stdout);
 63     while(~scanf("%d",&n)){
 64         getchar();
 65         M(vis,false),M(match,0),M(way,0);
 66         for(int i=1;i<=n;i++)
 67             scanf("%s",dance[i]);
 68         for(int i=1;i<=n;i++){
 69             for(int j=1;j<=n;j++){
 70                 if(i!=j)
 71                     match[i][j]=match[j][i]=solve(i,j); //预处理匹配状况
 72             }
 73         }
 74         ans=inf; //初始化ans sum
 75         sum=0;
 76         dfs(1); //搜索
 77         printf("%d\n",ans);
 78
 79     }
 80     return 0;
 81 }
 82 /*
 83
 84 5
 85 ABC
 86 ABEF
 87 DEF
 88 ABCDE
 89 FGH
 90 6
 91 BDE
 92 FGH
 93 DEF
 94 ABC
 95 BDE
 96 ABEF
 97 4
 98 XYZ
 99 XYZ
100 ABYZ
101 Z
102
103
104 */
时间: 2024-10-06 20:13:55

UVALive 7352 Dance Recital的相关文章

UVALive 2031 Dance Dance Revolution

题解: 简单DP dp[i][j][k] 表示第i步双脚在位置j和位置k的位置 然后根据题意推一下转移方程就行了 代码: #include<bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define se second #define fs first #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #def

UVALive - 2031 Dance Dance Revolution 三维dp

题目大意:有一个胖子在玩跳舞机,刚开始的位置在(0,0),跳舞机有四个方向键,上左下右分别对应1,2,3,4.现在有以下规则 1.如果从0位置移动到任意四个位置,消耗能量2 2.如果从非0位置跳到相邻的位置,如1跳到2或4,消耗能量3 3.如果从非0位置跳到对面的位置,如2跳到4,消耗能量4 4.如果跳同一个位置,消耗能量1 5.两只脚不能在同一个位置 解题思路:这题其实很水,直接暴力就可以解决了,讨论所有情况,用dp[i][j][k]表示跳第k个数字,左脚在i这个位置,右脚在j这个位置时所消耗

训练指南DP阶段训练1

最近又忙又颓.............时间抓不紧....下学期开始就要准备考研了.......就2个月左右可以做自己喜欢的事了....争取把紫书和白书没做的,做过的..来一次完整的总结 训练指南上面的5个例题+后面15个习题是第一阶段 vjudge训练地址 http://vjudge.net/contest/139533#overview -------------------------------------------------------------------------------

UVALive 4222 /HDU 2961 Dance 大模拟

Dance Problem Description For a dance to be proper in the Altered Culture of Machinema, it must abide by the following rules: 1. A dip can only appear 1 or 2 steps after a jiggle, or before a twirl, as in:* ...jiggle dip...* ...jiggle stomp dip...* .

UVALive 4848 Tour Belt

F - Tour Belt Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVALive 4848 Description Korea has many tourist attractions. One of them is an archipelago (Dadohae in Korean), a cluster of small islands sca

UVALive 6467 Strahler Order 拓扑排序

这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ 以后能用CIN还是CIN吧 QAQ 贴代码了: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostre

Cow Dance Show

题目大意: 经过几个月的排练,奶牛们基本准备好展出她们的年度舞蹈表演.今年她们要表演的是著名的奶牛芭蕾--"cowpelia". 表演唯一有待决定的是舞台的尺寸.一个大小为K的舞台可以支持K头牛同时在舞台上跳舞.在牛群中的N头牛(1<=N<=10,000)按照她们必须出现在舞蹈中的顺序方便地编号为1..N.第i头牛计划跳d[i]的特定持续时间.一开始,第1..K头牛出现在舞台上并开始跳舞.当这些牛中的某一头牛首先完成了她的部分,她会马上离开舞台并且第K+1头牛会出现在舞台上

BZOJ-1305: [CQOI2009]dance跳舞(最大流 增加超级源汇+分裂点+二分 水题)

1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec  Memory Limit: 162 MB Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”).每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞.给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲? Inpu

UVALive 7077 Little Zu Chongzhi&#39;s Triangles (有序序列和三角形的关系)

这个题……我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了……结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现N非常小,想到了回溯每个棍的分组,最多分5组,结果发现超时了……最大是5^12 =  244,140,625,厉害呢…… 后来想贪心,首先想暴力出所有可能的组合,结果发现替换问题是一个难题……最后T T ,我就断片了.. 等看了别人的办法以后,我才发现我忽视了三角形的特性,和把数据排序以后的特点. 如果数据从