HDU 5890 Eighty seven(DP+bitset优化)

题目链接 Eighty seven

背包(用bitset预处理)然后对于每个询问O(1)回答即可。

预处理的时候背包。

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 #define rep(i, a, b)        for(int i(a); i <= (b); ++i)
 6 #define dec(i, a, b)        for(int i(a); i >= (b); --i)
 7
 8 const int N = 52;
 9
10 int T, q, n;
11 int f[N][N][N], c[5], a[N], Q;
12
13 bitset <90> A[12];
14
15 int check(int i, int j, int k){
16     rep(h, 0, 10) A[h].reset(); A[0][0] = 1;
17     rep(h, 1, n) if (h != i && h != j && h != k && a[h] <= 87) dec(p, 9, 0){
18         A[p + 1] |= A[p] << a[h];
19         if (A[10][87]) return 1;
20     }
21
22     return 0;
23 }
24
25 int main(){
26
27     scanf("%d", &T);
28     while (T--){
29         scanf("%d", &n);
30         rep(i, 1, n) scanf("%d", a + i);
31         rep(i, 1, n) rep(j, i, n) rep(k, j, n) f[i][j][k] = check(i, j, k);
32         scanf("%d", &Q);
33         while (Q--){
34             scanf("%d%d%d", c + 1, c + 2, c + 3);
35             sort(c + 1, c + 4);
36             puts(f[c[1]][c[2]][c[3]] ? "Yes" : "No");
37         }
38     }
39
40     return 0;
41
42 }
时间: 2024-10-25 22:45:32

HDU 5890 Eighty seven(DP+bitset优化)的相关文章

hdu 5890 Eighty seven 暴力+bitset优化背包

Eighty seven Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Problem Description Mr. Fib is a mathematics teacher of a primary school. In the next lesson, he is planning to teach children how to add numbers up. B

hdu5313Bipartite Graph(二分图染色+DP(bitset优化))

题意:给n个点m条边,问最多可以添加几条边使图为完全二分图 分析:如果二分图没有限制,看到是两边分别为n/2个点和n-n/2个点的最优但是可   能出现大于此点的情况,比如n=4,m=3,边为1 2,1 3,1 4.此时完全二分图边最多为3,所以要求得二分图左边或者右边可达到的离n/2最近的点数是多少为最优解,于是采用染色分别求出各个联通快的2种颜色的各个点数,然后用推出能达到的点数,这里dp[i]的下一个状态是dp[i+1]+d[i+1][0]和dp[i+1][1](dp[i]为前i个二分图的

HDU 5313——Bipartite Graph——————【二分图+dp+bitset优化】

Bipartite Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 840    Accepted Submission(s): 285 Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he w

HDU - 5009 Paint Pearls(dp+双向链表优化)

Problem Description Lee has a string of n pearls. In the beginning, all the pearls have no color. He plans to color the pearls to make it more fascinating. He drew his ideal pattern of the string on a paper and asks for your help. In each operation,

Hdu 5890 Eighty seven

给些数字,可能去掉其中一些,检验能否算到87 用bitsets做背包,细节处之处理i<=j<=k的情况 查询的时候排序一下就好了. #include<bits/stdc++.h> using namespace std; bitset<90>dp[11]; int ans[60][60][60]; int a[100],n,m; int q[5]; int check(int x,int y,int z) { for(int i=0;i<=n;i++)dp[i].

bzoj3687简单题(dp+bitset优化)

3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 861  Solved: 399[Submit][Status][Discuss] Description 小呆开始研究集合论了,他提出了关于一个数集四个问题:1.子集的异或和的算术和.2.子集的异或和的异或和.3.子集的算术和的算术和.4.子集的算术和的异或和.    目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把这个问题交给你,未来的集训队队员来实现

hdu 5745 La Vie en rose(dp+bitset)

题目链接:hdu 5745 La Vie en rose 题意: 给两个字符串 a 和 b ,b可以进行变换,规则是可以任意交换相邻两个字符的位置,但是不可以有交叉(例如3和4交换,5和6交换 互不影响,但是2和3,3和4就不可以).求a中每一个位置能不能匹配b或b变换得到的子串. 题解: 考虑dp,dp[i][j][k]表示a[i]和b[j]匹配,k为1表示j未做交换,k=0表示j和j-1进行交换,k=2表示j和j+1进行交换. 然后bitset优化一下常数. dp方程为: dpi,j,0=d

hdu 5036 Explosion bitset优化floyd

http://acm.hdu.edu.cn/showproblem.php?pid=5036 题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个. 如果走了1,那么1能联通的顶点就可以直接走过去,其他不和1连通的,就需要炸坏.问需要炸弹的期望. 比如一副图是1-->2-->3的.那么期望是11 / 6 假如从1号点开始,1/3概率选中1号点开始,那么需要炸弹数是1(炸开一号),贡献是1/3 假如从2号点开始,1/3概率选中2号点开始,那么需要炸开2号点,然后

HDU 4284 状压dp+spfa堆优化

题意: 给定n个点 m条无向边 d元. 下面m行表示每条边 u<=>v 以及花费 w 下面top 下面top行 num c d 表示点标为num的城市 工资为c 健康证价格为d 目标是经过给定的top个城市,当到达该城市时,必须马上购买该城市的健康证并打工赚钱(每个城市只打工1次) 问从1城市出发,最后回到1城市,能否收集到所有的健康证 思路: 由于top很小,所以状压dp dp[i][tmp]表示当前处于i点 经过城市的状态为tmp时 身上最多的钱. 首先对dis数组floyd 跑出最短路,