热身训练4 Eighty seven
Eighty seven
简要题意:
n个卡片,其中第i个卡片的数值为$a[i]$。一共q次询问,每次询问将删去其中3个卡片(可能删除若干相同的卡片)后,问能否选出10个卡片,数值之和等于87。
n≤50,q≤100000
分析:
当我们知道删去哪些卡片后,这是一道很显然的背包dp。
dp[i][j]表示:选择了i个卡片,数值之和为j,这个状态行不行,若dp[i][j]=1,则行。否则,不行。
由于数值都是正数,且要求的数值之和为87,所以这个dp耗时O(87*10*n),但由于询问数很多,最终耗时O(87*10*50*100000) = O(4.35*1e9),肯定过不了。
但是,dp值只有0、1,这使得bitset优化成为了可能,优化完后,耗时O(135937500)。
同时,这道题的询问有很多是相同的,需要记录一下来优化。
十分玄学!!!
#include<bits/stdc++.h>
using namespace std;
bool ans[55][55][55];
bitset<90>s[20];
int a[60],n;
void solve(int x,int y,int z)
{
for(int i=0;i<=11;i++) s[i].reset();
s[0][0]=1;
for(int i=1;i<=n;i++){
if(i==x||i==y||i==z||a[i]>87) continue;
for(int j=10;j>=1;j--) s[j]|=s[j-1]<<a[i];
}
if(s[10][87]==1) ans[x][y][z]=true;
else ans[x][y][z]=false;
}
int main()
{
int T,Q;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]); for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
solve(i,j,k); scanf("%d",&Q);
while(Q--)
{
int x[3];
scanf("%d%d%d",&x[0],&x[1],&x[2]);
sort(x,x+3);
if(ans[x[0]][x[1]][x[2]]) puts("Yes");
else puts("No");
}
}
return 0;
}
热身训练4 Eighty seven的更多相关文章
- 数位dp & 热身训练7
数位dp 数位dp是一种计数用的dp,一般就是要统计一段区间$[L,R]$内,满足一定条件的数的个数,或者各个数位的个数. 数位dp使得暴力枚举变为满足一定状态的记忆化,更加优秀. 数位dp常常会考虑 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...
- 热身训练2 The All-purpose Zero
The All-purpose Zero 简要题意: 长度为n的数组,每个数字为S[i],$0$是一种很神奇的数字,你想要的,它都可以变! 问这个序列的最长上升子序列长度为多少? 分析: 我们将除了 ...
- 热身训练3 Palindrome
Palindrome 简要题意: 我们有一个字符串S,字符串的长度不超过500000. 求满足S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)(n≥2)的子串个数. 分析: 我们能通过简 ...
- 热身训练2 GCD
题目描述 简要题意: n个数字,a1,a2,...,an m次询问(l,r),每次询问需回答 1.gcd(al,al+1,al+2,...,ar);2.gcd(ax,ax+1,ax+2,...,ay ...
- 热身训练2 Another Meaning
题目来源 简要题意: 众所周知,在许多情况下,一个词语有两种意思.比如"hehe",不仅意味着"hehe",还意味着"excuse me". ...
- 热身训练1 Calculator
题目出处:Calculator 简要题意: 你有一个确定的函数,f(x)=+...*...^...,其中共有n个操作,从左到右依次计算. 共有m次询问,我们每次询问,1.会修改f(x)中的操作:2.输 ...
- 热身训练1 ping ping ping
点此进入 题意: 一棵树,n+1 个节点,以0号节点为根,给出端点(a,b),节点a到节点b的路径上,至少有一个点是"坏掉的",求"坏掉的点"最少 分析: St ...
- 热身训练1 Problem B. Harvest of Apples
http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: 求 C(0,n)+C(1,n)+...+C(m,n) 分析: 这道题,我们令s(m,n) = C( ...
随机推荐
- MySQL实战45讲(06--10)-笔记
目录 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍? 全局锁 表级锁 小结 07 | 行锁功过:怎么减少行锁对性能的影响? 死锁和死锁检测 08 | 事务到底是隔离的还是不隔离的? &quo ...
- wpf 多表头
WPF多表头技术探索总结 方案一:Grid+TextBlock嵌套DataGrid方式. 该方案是现在项目中已使用的方案.实现起来比较简单,但不具有通用性,不同数据DataGrid需要指定不同的Tex ...
- 傻子都能懂的并查集题解——HDU1232畅通工程
原题内容: Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都 ...
- jsp页面动态获取系统时间
最近在做练习时碰到了这样一个问题:"读者选择查询图书相应信息,跳转到书目的详细信息界面,当可借阅数量大于零,点击借阅按钮,提示用户借阅成功,并显示归还日期(三个月),否则提示用户该书可借阅数 ...
- 注意!PHP中字符串与数字的比较
在日常开发过程中,运算符是我们每天都会接触到的.这个运算符中其实埋了非常多的坑,今天我们就来看下字符串和数字用比较需要注意的问题. 首先来看看这些代码: echo '"1234" ...
- 【PHP】数组按照字母排序
/** * 将数组按字母A-Z排序 * @return [type] [description] */ private function chartSort($list) { // $user=$th ...
- Orchard Core 简介
Orchard Core 是基于ASP.NET Core 对Orchard CMS的 二次开发. Orchard Core由两部分组成: Orchard Core Framework: 一个基于ASP ...
- nginx 常用x代码
1.nginx 禁止ip直接访问,只允许域名访问,直接在.conf文件里 server上面再添加一个server 代码,不可以写同一个server里: server { listen 80 defau ...
- Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题
Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题 继实现动态修改请求 Body 以及重试带 Body 的请求之后,我们又遇到了一个小问题.最近很多接口,收到 ...
- 位运算符的用法 ----非(!),与(&),或(|),异或(^)
位运算符的用法 ----非(!),与(&),或(|),异或(^) 三种运算符均针对二进制 非!:是一元运算符.对一个二进制的整数按位取反,输入0则输出1,输入1则输出0. 例: 0100 -( ...