【2018百度之星资格赛】 A 问卷调查 - 位运算&动规

题目地址:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=820&pid=1001

参考博客:在此感谢http://www.cnblogs.com/LQLlulu/p/9419232.html博主,多谢指教,受益良多

Summarize:

  1. 使用动态规划的方法,状态转移方程:f[i][p]=f[i-1][p]+i-和第i个答案集合相同的数目;

  2. 转移方程中i表示第i份答卷,p表示被选中问题集合,因为每个问题只有A,B两种答案,故可使用二进制表示,1表示选‘A’,2表示选‘B’;

  3. p则表示问题集合,从01至(1<<m)-1循环;

  4. “+i”表示假设前i份问卷都与i不同(包括i本身);

  5. PS: 注意数组范围,虽然题目只给了n在1000以内,但通过刚才的分析我们发现,vis数组因为开到了(1<<m)-1,所以至少要开到1<<m,即1024!!

附代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 #define LL long long
 8 const int N = 1025;
 9 int T, n, m, k, f[N][1<<11], vis[N];
10 char text[N][15];
11
12 int main()
13 {
14     scanf("%d", &T);
15     for(int t=1; t<=T; t++)
16     {
17         scanf("%d%d%d", &n, &m, &k);
18
19         for(int i=1; i<=n; i++)
20             scanf("%s", text[i]);
21
22         int all = (1<<m)-1;
23         for(int p=0; p<=all; p++) {
24             memset(vis, 0, sizeof(vis));
25             for(int i=1; i<=n; i++) {
26                 int w=0;
27                 for(int j=0; j<m; j++) {
28                     if( p&(1<<j) && text[i][j]==‘A‘)
29                         w|=(1<<j);
30                 }
31                 vis[w]++;
32                 f[i][p] = f[i-1][p]+i-vis[w];
33
34             }
35         }
36
37         int ans=0;
38         for(int i=0; i<(1<<m); i++)
39             if(f[n][i]>=k)
40                 ans++;
41         printf("Case #%d: %d\n", t, ans);
42     }
43
44     return 0;
45 }

原文地址:https://www.cnblogs.com/liubilan/p/9424727.html

时间: 2024-10-02 02:53:37

【2018百度之星资格赛】 A 问卷调查 - 位运算&动规的相关文章

2018百度之星资格赛1002

没错就是用来造(蹭)福(访)大(问)众(量)的 发现最小的子串只会是A~Z 直接统计前缀和...sum[26]统计一下... 1 #include<cstdio> 2 #include<cstring> 3 int sum[100005][26]; 4 int main() { 5 int t; 6 scanf("%d",&t); 7 for(int T=1;T<=t;T++) { 8 printf("Case #%d:\n",

2018百度之星资格赛A B F

A.调查问卷 度度熊为了完成毕业论文,需要收集一些数据来支撑他的论据,于是设计了一份包含 mm 个问题的调查问卷,每个问题只有 'A' 和 'B' 两种选项. 将问卷散发出去之后,度度熊收到了 nn 份互不相同的问卷,在整理结果的时候,他发现可以只保留其中的一部分问题,使得这 nn 份问卷仍然是互不相同的.这里认为两张问卷是不同的,当且仅当存在至少一个被保留的问题在这两份问卷中的回答不同. 现在度度熊想知道,存在多少个问题集合,使得这 nn 份问卷在只保留这个集合的问题之后至少有 kk 对问卷是

2014百度之星资格赛题解

比赛链接:点击打开链接 ,,杭电把比赛关了代码都找不到了.. 无责任民科还是mark一下好了.. HDU 4823 Energy Conversion 把式子变换一下发现是一个等比数列,高速幂就可以. #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; #define ll __int64 #define inf 10000

2014百度之星资格赛—— Xor Sum(01字典树)

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起

2014百度之星资格赛第三题

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 7837    Accepted Submission(s): 3350 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Z

2014百度之星资格赛——XOR SUM

2014百度之星资格赛--XOR SUM Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么? Inp

[2014百度之星资格赛]

第一题: Energy Conversion Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸

2016&quot;百度之星&quot; - 资格赛(Astar Round1) Problem D 简单题

Problem D Accepts: 1527 Submissions: 4307 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家的所有人命名自己的名字都非常奇怪.一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字.例如,如果一个人名字

hdu 5685 Problem A(2016&quot;百度之星&quot; - 资格赛(Astar Round1)——线段树)

题目链接:acm.hdu.edu.cn/showproblem.php?pid=5685 Problem A Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 564    Accepted Submission(s): 236 Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长