样例说明

对于样例 1 而言,f(1)=1f(1)=1,f(2)=9f(2)=9,f(3)=26f(3)=26,f(4)=24f(4)=24。

对于样例 2,f(1)=0f(1)=0,f(2)=2f(2)=2。

样例输入1

4 1
1 1 1 1
样例输出1

193
样例输入2

2 2
2 3
样例输出2

4
样例输入3

1 233
233
样例输出3

1

首先这种肯定想到递推dp,然后就是如何递推过去,肯定就是dp[n]=前面所有可以到达的状态和。因为再走一步就可以达到dp[n].
如何找到前面所有走一步可以到达当前状态的状态。连续的gcd才是一个块.

用状压dp来分块找到哪些状态可以变为当前的状态 存起来 然后线性dp就好了

刚开始看到这个题一脸蒙蔽 是因为这句话没看懂:注意:一次删除以后,剩下的数会合并成为一个连续区间。

这个其实就是 1001001 这个状态可以由 1000001 这个状态转化而成 也就是1000001加一步可以得到 1001001

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;ll dp[20][(1<<18)+10];vector<int> v[(1<<18)+10];int a[30];const int mod = 1e9+7;int gcd(int a,int b)
{return (b==0)?a:gcd(b,a%b);
}int main()
{int n,K;scanf("%d%d",&n,&K);for(int i=0;i<n;i++)scanf("%d",&a[i]);int end=(1<<n);for(int st=0;st<end;st++){for(int j=0;j<n;j++){if(st&(1<<j)){int tmp=st^(1<<j);v[st].push_back(tmp);int g=a[j];for(int k=j+1;k<n;k++){if(st&(1<<k)){if((g=gcd(g,a[k]))>=K)tmp^=(1<<k),v[st].push_back(tmp);else break;}}}}}dp[0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<end;j++){for(int k=0;k<v[j].size();k++){dp[i][j]=dp[i][j]+dp[i-1][v[j][k]]%mod;//从0开始 上一个状态 //加上一个块当前状态是由哪些上一个状态加块得到的,所以只要需要的块加一即可}}}long long res=0;for(int i=1;i<=n;i++){res=(res+(ll)i*dp[i][(1<<n)-1]%mod)%mod;}printf("%lld\n",res );
}

腾讯消消乐 状压dp加普通dp相关推荐

  1. Educational DP Contest U - Grouping 状压dp

    传送门 题意: 给你nnn个物品,让你将其分成任意组,在同一个组内的i,ji,ji,j会获得ai,ja_{i,j}ai,j​的收益,让你选择一种分组方案使得收益最大. 1≤n≤16,∣ai,j∣≤1e ...

  2. BZOJ 3864: Hero meet devil (从dp性质实现dp套dp)

    题意:求长度为m的,字符集大小为4的,字符串,中,与字符串S(|S|<=15)的最长公共子序列长度=i的字符串数量.i∈0→∣S∣i \ \in 0 \to |S|i ∈0→∣S∣ 发现这个状态 ...

  3. P4321-随机漫游【状压dp,数学期望,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出nnn个点mmm条边的一张无向图,qqq次询问. 每次询问给出一个点集和一个起点,求从起点出 ...

  4. 【CF1209E】Rotate Columns【状压DP】【位运算】【贪心】

    题意:给一个N×MN \times MN×M的矩阵,可以进行任意多次操作将一列轮换,求每一行的最大值之和的最大值.多组数据. Easy VersionN≤4N \leq 4N≤4,M≤100M \le ...

  5. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  6. *【HDU - 4272 】LianLianKan (dfs 或 状压dp,贪心不行)

    题干: I like playing game with my friend, although sometimes looks pretty naive. Today I invent a new ...

  7. 【校内互测】Sunshine’s string(merge) (状压dp)

    Sunshine's string(merge.cpp) [问题描述] 无聊的Sunshine大爷开始研究字符串.他找来了一个长度为n的01字符串,并制定了一些规则:每次可以将k个字符合并,得到一个新 ...

  8. 一维消消乐c语言数据结构,Python数据结构:一维开心消消乐

    一维开心消消乐 题目内容: 开心消消乐我们都熟悉,我们可以用刚学过的栈来做一个"一维"的开心消消乐游戏,这个游戏输入一串字符,逐个消去相邻的相同字符对. 如果字符全部被消完,则输出 ...

  9. 宾果消消乐和宾果消消消_手机游戏软件宾果消消消和开心消消乐各有什么优点?...

    展开全部 开心消消62616964757a686964616fe58685e5aeb931333363393132乐是一款三消类休闲游戏,游戏画面精美.上手简单.玩家只需滑动手指让三个及以上的同色小动 ...

最新文章

  1. 用Ajax 构建关键任务的企业级Web 应用 ——《深入 Ajax :架构与最佳实践》
  2. 事务隔离级别IsolationLevel
  3. ATTCK矩阵 linux系统安全实践
  4. Excel中的的经纬度坐标在地图上显示
  5. oop中构造函数编写的注意事项
  6. sql server在执行批处理时出现错误。错误消息为: 目录名无效
  7. ViewState机制的解析(转自csdn)
  8. 使用TI 的低功耗C5x DSP的指纹识别方框图和解决方
  9. 借助 Cloud Toolkit 快速创建 Dubbo 工程
  10. adobe FMS(flash media server)错误解决小结
  11. 14.TCP/IP 详解卷1 --- DNS:域名系统
  12. Python 中的 if __name__ == '__main__'
  13. 天翼云虚拟IP地址及其在高可用集群中的应用
  14. Android平台介绍
  15. 系统工程师 运维工程师区别
  16. 数字音频:音频采样率和位深度
  17. #腾讯云·未来开发者云梯计划#第三期上线啦!全国5000个免费云认证培训考试名额开放报名中!
  18. 四平方和python_成都房价现在多少?和北京差距很大吗?Python爬取了四万套房源!...
  19. FGUI+Laya Air 游戏架构之stage分层架构
  20. GNSS 差分定位技术

热门文章

  1. CH341A及XTW 2两种SPI FLASH烧录器的硬件使用说明_20220920【可用于升级主板BIOS】
  2. 席慕容的诗歌——《我愿为莲》
  3. 解决光纤猫恢复出厂功能后的上网问题
  4. FeynRules的上手使用1--介绍模型参数设置
  5. 运动生理学:同骨骼肌相比,心肌细胞的收缩特点是什么?
  6. 区块链学习——区块链的架构
  7. python开源项目贡献_为开源项目做出第一笔贡献
  8. 【专利转让】掌纹识别、图像复原、人脸检测定位相关领域
  9. 很多情侣看了后,晚上再不关机了!
  10. 统计考勤报表 oracle对多个列求和 sum() 函数