传送门

三进制状压感觉有点难写啊。

不过这题状态转移方程挺简单的。

就直接f[i][j]表示前i行第i行状态为j时的选法总数,分情况转移就行了。

代码:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define mod 1000000
  4. #define N 10005
  5. using namespace std;
  6. int n,m,K,ban,ans=0,sta[1005],tot=0,stat,f[N][1005],bit[6],pos;
  7. inline bool check(int x){
  8. int tmp=0x3f;
  9. for(int i=1;i<=m;++i){
  10. if(tmp==x%3)return false;
  11. tmp=x%3,x/=3;
  12. }
  13. return true;
  14. }
  15. inline int read(){
  16. int ans=0;
  17. char ch=getchar();
  18. while(!isdigit(ch))ch=getchar();
  19. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  20. return ans;
  21. }
  22. inline bool judge(int a,int b){
  23. for(int i=1;i<=m;++i){
  24. if(a%3==b%3)return false;
  25. a/=3,b/=3;
  26. }
  27. return true;
  28. }
  29. int main(){
  30. n=read(),m=read(),K=read(),stat=1;
  31. for(int i=1;i<=m;++i)stat*=3;
  32. for(int i=0;i<stat;++i)if(check(i))sta[++tot]=i;
  33. for(int i=1;i<=m;++i)ban=ban*3+read()-1;
  34. for(int i=1;i<=tot;++i)if(ban==sta[i]){pos=i;break;}
  35. if(!pos){puts("0");return 0;}
  36. for(int i=1;i<=n;++i){
  37. if(i==K){
  38. if(i==1)f[i][pos]=1;
  39. else for(int j=1;j<=tot;++j)if(judge(sta[pos],sta[j]))
  40. (f[i][pos]+=f[i-1][j])%=mod;
  41. }
  42. else for(int j=1;j<=tot;++j){
  43. if(i==1)f[i][j]=1;
  44. else for(int k=1;k<=tot;++k)if(judge(sta[j],sta[k]))
  45. (f[i][j]+=f[i-1][k])%=mod;
  46. }
  47. }
  48. for(int i=1;i<=tot;++i)(ans+=f[n][i])%=mod;
  49. cout<<ans;
  50. return 0;
  51. }

2018.09.10 loj#10172. 涂抹果酱(状压dp)的更多相关文章

  1. loj#10172 涂抹果酱 (状压DP)

    题目: #10172. 「一本通 5.4 练习 1」涂抹果酱 解析: 三进制的状压DP 经过简单的打表发现,在\(m=5\)时最多有\(48\)种合法状态 然后就向二进制一样枚举当前状态和上一层的状态 ...

  2. 2018.09.22 牧场的安排(状压dp)

    描述 农民 John 购买了一处肥沃的矩形牧场,分成M*N(1 <= M <= 12; 1 <= N <= 12)个 格子.他想在那里的一些格子中种植美味的玉米.遗憾的是,有些 ...

  3. 2018.09.08 poj1185 炮兵阵地(状压dp)

    传送门 状压dp经典题. 我们把每一行的状态压成01串. 预处理出每一行可能出现的状态,然后转移每个被压缩的状态的1的个数就行了. 注意当前行转移要考虑前两行的状态. 还要注意只有一行的情况. 代码: ...

  4. 2018.09.08 NOIP模拟 division(状压dp)

    这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;&qu ...

  5. 2018.10.24 bzoj2064: 分裂(状压dp)

    传送门 状压dp好题. 考虑对于两个给出的集合. 如果没有两个元素和相等的子集,那么只能全部拼起来之后再拆开,一共需要n1+n2−2n1+n2-2n1+n2−2. 如果有呢? 那么对于没有的就是子问题 ...

  6. 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)

    [描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...

  7. 洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】

    题目 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当这个 ...

  8. loj 1316(spfa预处理+状压dp)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27024 题意:求0-(n-1)的经过最多的标记的点的最短路. 思路 ...

  9. noi省选 [九省联考2018]一双木棋题解(状压dp)

    比浙江简单多了........ 题目转送:https://www.luogu.org/problemnew/show/P4363 分析: 我们注意到n和m都很小,考虑一下状压dp. 显然,棋子摆成的形 ...

随机推荐

  1. leetcode506

    public class Solution { public string[] FindRelativeRanks(int[] nums) { var list = nums.OrderByDesce ...

  2. 在eclipse中创建maven项目,亲测有效,详细步骤

    一.想要使用maven,首先要配置本地maven的环境 1.在http://maven.apache.org/download.cgi中去下载maven 2. 3.下载完毕后将压缩包解压到自己记住的位 ...

  3. jq js 对象互转

    . DOM 对象转成 jQuery 对象 对于已经是一个 DOM 对象,只需要用 $() 把DOM对象包装起来,就可以获得一个 jQuery 对象了,$(DOM 对象) 注: var是定义变量 如: ...

  4. ubuntu查询可用安装包

    当使用apt-get install packages时,如果不知道安装包的具体名称,可以使用关键字进行搜索,使用:apt-cache search keywords

  5. 【转】oracle 体系结构

    前几天面试的时候面试官才问过我Oracle的体系结构,让我在一张白纸上画出来.回头想想当时答得还不错,大部分内容都描述出来了,呵呵,刚才在网上看到一篇讲解ORACLE体系结构的文章,觉得不错,转过来存 ...

  6. Docker-删除untagged docker images

    故障描述 [root@entel1 ~]# docker rmi entel_zmc_images:zmc_base Untagged: entel_zmc_images:zmc_base 操作步骤 ...

  7. SpringBoot整合Shiro (二)

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.相比较Spring Security,shiro有小巧.简单.易上手等的优点.所以很多框架都在使用sh ...

  8. conductor 事件处理程序

    Introduction conductor中的事件提供工作流之间的松散耦合,并支持从外部系统生成和消耗事件. 包括: 1. 能够在外部系统像SQS或Conductor内部生成一个事件(消息). 2. ...

  9. 兼容IE7、IE8、IE9的input type="number"插件

    IE11版本好像才兼容input type="number",但是现在Win7版本操作系统下,很多人的IE版本都是IE7/8/9,所以为了体验就自己写了一个小插件,支持设置最大值. ...

  10. models渲染字典&form表单上传文件&ajax上传文件

    {# {% for u in teacher_d.keys %}#} {# {% for u in teacher_d.values %}#} {% for k,u in teacher_d.item ...