hdu5890 bitset优化DP

news/2024/11/8 20:30:32/

hdu5890 暴力DP(bitset常数优化)

        

        题目连接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5890

        这道题目我的队友当场暴力搜索写过,ORZ。赛后发现是bitset优化的DP,因为之前没写过这样的DP,所以记录一下。
其实暴力的DP很好写,不过算一下复杂度,本质不同的询问有2W左右,可以开数组记录一下,每次暴力DP的代价是87*10*47*47大概4W左右,总复杂度8e8,一般是跑不过的。但是常数优化很强大有木有?何况bitset是自带的stl,用起来很方便。因为状态只有01两种,所以直接用bitset存储,状态转移的时候没加一个数,87个状态整体左移这个数的大小即可,复杂度为8e8/w,w据说是机器字长,w=8位左右正好可以卡过。还有其他优化方法本渣渣就不在介绍了,可以上X姐博客上看。
附上代码:


//#include <bits\stdc++.h>
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <bitset> #define sqr(x) ((x)*(x))            
#define lson (p<<1)
#define rson (lson | 1)
#define EPS 1e-10
#define PII pair<int,int>
#define PLI pair<LL,int>
#define PLL pair<LL,LL>
#define PIL pair<int,LL>
#define mk(x,y) make_pair(x,y)
#define lowbit(x) (x&(-x))
#define FR freopen("in.txt","r",stdin)
#define FW freopen("out.txt","w",stdout)
using namespace std;
template <class T> 
inline void read(T &x){char c = getchar(); x = 0;while(!isdigit(c))c = getchar();while(isdigit(c)){x=x*10 + c-'0';c = getchar();}}
template <class T> 
inline void rd(T &res) {static char ch; bool sgn = false;while (ch = getchar(), ch < '0' || ch > '9') if (ch == '-') sgn = true;res = ch - 48;while (ch = getchar(), ch >= '0' && ch <= '9') res = res * 10 + ch - 48; res = sgn ? -res : res;}
template <class T> void Out(T a) { if(a < 0){putchar('-');a = -a;}if(a >= 10)Out(a / 10);putchar(a % 10 + '0');  }  
typedef long long LL;
const int N = 12;
const int M = 51; 
bitset<88>bi[N];
int ans[M][M][M],a[M],b[4];
bool flag[M];
int main()
{   int cas;rd(cas);while(cas--){int n,m;rd(n);for(int i=1;i<=n;i++) rd(a[i]);memset(ans,-1,sizeof(ans));rd(m);while(m--){for(int i=0;i<3;i++) rd(b[i]);sort(b,b+3);if(ans[b[0]][b[1]][b[2]] != -1){if(ans[b[0]][b[1]][b[2]]) puts("Yes");else puts("No");continue;} for(int i=0;i<3;i++) flag[b[i] ] = 1;for(int i=0;i<=10;i++) bi[i].reset();bi[0][0] = 1;for(int i=1;i<=n;i++){if(flag[i] || a[i]>87) continue;for(int j=9;j>=0;j--){bi[j+1] |= (bi[j] << a[i]);}} ans[b[0]][b[1]][b[2]] = bi[10][87];if(bi[10][87]) puts("Yes"); else puts("No"); for(int i=0;i<3;i++) flag[b[i] ] = 0;}}return 0;
}


http://www.ppmy.cn/news/153481.html

相关文章

酷派5890刷recovery详细教程

酷派5890要第三方刷机包。或者是要ROOT权限多是需要先刷recovery的。现在第三方也开发了不少了第三方刷机包style"color:#2E2E2E;font-family:宋体;">。很多人想刷机。也有些人是为了获取ROOT权限。但是这两个多是要先来刷recovery。下面我们就来看看酷派5890的刷…

Framework 添加新的 系统服务

前言 想自己 添加 一个新的 系统服务&#xff0c;看看是否能实现&#xff0c;加深理解及学以致用。于是有了下文。 开发环境&#xff1a; Android SDK 31 (Android12 平台) 总体涉及修改的文件 1. 新增的服务 (1) 服务AIDL文件&#xff0c;定义服务的接口&#xff1a; fram…

混凝土墙开洞_临沂市混凝土墙打孔开洞方案

临沂市混凝土墙打孔开洞方案 北京专业打孔&#xff0c;工程打孔 水钻开开窗 加固北京打孔 拆除 加固 服务公司 楼板打孔、工程打孔、开门开窗、墙体拆除、地面拆除、广告牌拆除、承重墙开门开窗、开方洞、专业钻孔 空调钻孔、热水器钻孔、油烟机烟道钻孔、水管和电缆钻孔、钻暖…

购房中的坑

阶段关键词什么坑怎么避免坑遇坑怎么办备注1“五证”、“二书”是否齐全开发商推出的“跳楼价”、“VIP”“内部认购”等都是常见的销售手段&#xff0c;其实&#xff0c;一些开发商是在没有拿到预售许可证的情况下就进行所谓的内部认购&#xff0c;这种销售行为是不合法的。购…

工控人看工业物联网——困境与突破

先废话几句本人的背景&#xff1a;从2010年1月份开始进入企业实习&#xff0c;到现在——2021年1月&#xff0c;弹指一挥间&#xff0c;在工业自动化控制&#xff08;简称工控&#xff09;行业摸爬滚打已经10年有余了&#xff0c;主要服务于冶金化工工业和舰船港口行业。对工业…

A股市场,价投者眼中的10大金股,值得收藏(名单)

考虑到去年许多白马股被市场过度炒作&#xff0c;导致估值过高并透支了未来多年的收益空间&#xff0c;因此并不在本次推荐之列。 此外&#xff0c;一般来说三年的时间太短&#xff0c;易受市场先生情绪影响无法充分体现价值&#xff0c;而10年又太长个人能力所限难以把握&…

mybatis删除成功返回0_【出租/转租】2020.08.08亦庄周边信息汇总。增1个,删0个。(转租成功后私信我删除你的信息)...

加圈圈私人微信,拉你进群 以下信息为亦庄的小伙伴向圈圈投稿&#xff0c;让圈圈帮助发布的! 未经圈圈或当事人同意&#xff0c;禁止转载&#xff01; 如大家发现以下信息有不实或者收中介费的人&#xff0c;请给我留言&#xff01; 新关注我的点击下面蓝字查看获取联系方式教程…

非常时期的囤货手册,建议查看收藏

2小时囤货策略 一、原则 1个月,3口之家 (主要以快速和必要为主)这个决策很快作出,只要2小时内搞定超市就行(购买的东西、简单有效)。不要浪费时间在决策上,应该花时间在行动上。二、食物 50kg 各种米面干粮方便面、饼干、面包、蛋糕、巧克力、糖果、蜂蜜 若干1袋盐,1桶…