洛谷P2396 yyy loves Maths VII【状压dp】
题目:https://www.luogu.org/problemnew/show/P2396
题意:有n个数,每次选择一个表示走$a[i]$步,每个数只能选一次。
最多有两个厄运数字,如果走到了厄运数字就不能继续走下去了。
选完所有数有多少种方案。
思路:n很小,状压。
用state表示已经选了哪几个数。如果state是厄运数字就continue
不是的话state就需要加上所有是1的,这道题卡常,所以可以用上lowbit。再开O2优化。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<map> 4 #include<set> 5 #include<cstring> 6 #include<algorithm> 7 #include<vector> 8 #include<cmath> 9 #include<stack> 10 #include<queue> 11 #include<iostream> 12 13 #define inf 0x3f3f3f3f 14 #define lowbit(i) i&(-i) 15 using namespace std; 16 typedef long long LL; 17 typedef pair<int, int> pr; 18 19 int n, m; 20 const int maxn = 25; 21 const int mod = 1e9 + 7; 22 int bad[3]; 23 int dp[1 << maxn], dis[1 << maxn]; 24 25 26 int main() 27 { 28 scanf("%d", &n); 29 for(int i = 0; i < n; i++){ 30 scanf("%d", &dis[1 << i]); 31 } 32 scanf("%d", &m); 33 for(int i = 0; i < m; i++){ 34 scanf("%d", &bad[i]); 35 } 36 dp[0] = 1; 37 int mx = 1 << n; 38 for(int i = 1; i < mx; i++){ 39 dis[i] = dis[i ^ lowbit(i)] + dis[lowbit(i)]; 40 if(dis[i] == bad[0] || dis[i] == bad[1])continue; 41 for(int j = i, k = lowbit(j); j; j ^= k, k = lowbit(j)){ 42 dp[i] += dp[i ^ k]; 43 if(dp[i] >= mod)dp[i] -= mod; 44 } 45 } 46 47 printf("%d\n", dp[mx - 1]); 48 return 0; 49 }
转载于:https://www.cnblogs.com/wyboooo/p/11160126.html
洛谷P2396 yyy loves Maths VII【状压dp】相关推荐
- P2396 yyy loves Maths VII 状压dp 变态卡常
很容易想到dp,但是1<<24都有1600w的复杂度,要是普通做法肯定T掉 共有maxs=(1<<n)-1种情况 首先f[ ]记录某种情况的方案数,dis[ ]记录某种情况的步 ...
- 洛谷——P2393 yyy loves Maths II
P2393 yyy loves Maths II 题目背景 上次蒟蒻 redbag 可把 yyy 气坏了,yyy 说他只是小学生,蒟蒻 redbag 这次不坑他了. 题目描述 redbag 给了 yy ...
- [P2396] yyy loves Maths VII
Link: P2396 传送门 Solution: 一眼能看出$O(n*2^n)$的状压$dp$ 但此题是个卡常题,$n=23/24$的时候就别想过了 这题算是提供了一种对状压$dp$的优化思路吧 原 ...
- [洛谷2397]yyy loves Maths VI
题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数 他还特 ...
- 洛谷P2566 [SCOI2009]围豆豆(状压dp+计算几何)
题面 传送门 题解 首先要解决一个问题,就是怎么判断一个点是否在多边形内部 从这个点向某一个方向做一条射线,如果这条射线和多边形的交点为奇数说明在多边形内,否则在多边形外 然而有一些特殊情况,比方说一 ...
- 洛谷P2397 yyy loves Maths VI (mode) 摩尔投票
求众数的一种方法 不需要内存,排序 每次记录上次加的值以及个数,相等个数+1,不相等就-1 因为众数大于一半 最坏的情况也就是拿一个众数取走一个非众数 最后的结果肯定就是众数 //#pragma co ...
- 洛谷P2622 关灯问题II【状压dp+bfs】
P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j] ...
- 洛谷 - P2761 软件补丁问题(spfa+状压)
题目链接:点击查看 题目大意:给出 n 个错误,再给出 m 个补丁,对于每个补丁而言,设 b1,b2,f1,f2 分别为四个集合:当且仅当 b1 所表示的错误全部存在且 b2 所表示的错误没有任何一个 ...
- 「洛谷P2397」 yyy loves Maths VI (mode) 解题报告
P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ...
最新文章
- SpringMVC RequestMapping注解详解
- linux c之assert函数使用总结
- spring vaadin_在Spring Boot中使用Vaadin的简介
- HDU2066:一个人的旅行
- iPhone 14 Pro渲染图曝光 网友:冲这个外观就可以买了
- Java多线程、主线程等待所有子线程执行完毕、共享资源
- Java 能抵挡住 JavaScript 的进攻吗?
- 耐人深思的总结,牛牛牛
- 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
- python实时监控_python实时监控cpu小工具
- Altium designer--DB接口DB9/DB15/DB25/DB37/DB50
- Ceph测试工具总结
- 走出校门,重新起航,从纯粹到再次纯粹
- 对不起,不知道这些,我劝你还是别做软件测试员了!
- Python——单线程与多线程
- 乌镇互联网大会上世界大佬点赞中国创新,山寨帽子终于摘下?
- mapset——C++
- 【Android多屏适配】动态改变Listview item高度
- Java发送邮件时标题和发件人乱码
- 百度360搜索关键字
热门文章
- Mybatis将大于号、小于号进行转译
- Mysql 创建函数
- 毕设教学 单片机光照强度计使用
- 操作系统基础知识总结
- 晶体管为元件的计算机时代是,根据使用的元器件,将计算机的发展划分为几个时代...
- java string 转小写_Java String toLowerCase()(String转小写)与示例 - Break易站
- IOS应用程序自身的本地化
- atmega16单片机c语言程序设计经典实例pdf,《AVR单片机C语言程序设计实例精粹》.pdf...
- 网页图片画圈指摘,然后保存进数据库
- 自己写Linux Usb鼠标驱动程序