插头DP

 

 

 


 

 

 

AC HDU1693 不能再简单了的插头DP

  1 #include <cstdio>
  2 #include <fstream>
  3 #include <iostream>
  4  
  5 #include <cstdlib>
  6 #include <cstring>
  7 #include <algorithm>
  8 #include <cmath>
  9  
 10 #include <queue>
 11 #include <vector>
 12 #include <map>
 13 #include <set>
 14 #include <stack>
 15 #include <list>
 16  
 17 typedef unsigned int uint;
 18 typedef long long int ll;
 19 typedef unsigned long long int ull;
 20 typedef double db;
 21 typedef long double ldb;
 22  
 23 using namespace std;
 24  
 25 inline int getint()
 26 {
 27     int res=0;
 28     char c=getchar();
 29     bool mi=false;
 30     while((c<'0' || c>'9')/* && !feof(stdin)*/) mi=(c=='-'),c=getchar();
 31     while('0'<=c && c<='9'/* && !feof(stdin)*/) res=res*10+c-'0',c=getchar();
 32     return mi ? -res : res;
 33 }
 34 inline ll getll()
 35 {
 36     ll res=0;
 37     char c=getchar();
 38     bool mi=false;
 39     while(c<'0' || c>'9') mi=(c=='-'),c=getchar();
 40     while('0'<=c && c<='9') res=res*10+c-'0',c=getchar();
 41     return mi ? -res : res;
 42 }
 43 
 44 //==============================================================================
 45 //==============================================================================
 46 //==============================================================================
 47 //==============================================================================
 48 
 49 
 50 
 51 int n,m;
 52 int M[13][13];
 53 
 54 ull d[13][13][8192];
 55 
 56 inline uint get(uint k,int l){ return k&(1<<l); }
 57 inline bool exist(uint k,int l) { return get(k,l)>0; }
 58 inline uint clr(uint k,int l){ return k&(0xFFFFFFFF-(1<<l)); }
 59 inline uint ins(uint k,int l){ return k|(1<<l); }
 60 inline uint trs(uint k,int l,int v)
 61 {
 62     switch(v)
 63     {
 64         case 0: return clr(clr(k,m),l);
 65         case 1: return ins(clr(k,m),l);
 66         case 2: return clr(ins(k,m),l);
 67         case 3: return ins(ins(k,m),l);
 68         default:return k;
 69     }
 70 }
 71 void prt(uint k) { for(int i=0;i<=m;i++) printf("%d",exist(k,i)); }
 72 
 73 int main()
 74 {
 75     for(int T=getint(),cc=0;T;T--)
 76     {
 77         n=getint();
 78         m=getint();
 79         for(int i=1;i<=n;i++)
 80         for(int j=1;j<=m;j++) M[i][j]=getint();
 81         
 82         for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) 
 83         memset(d[i][j],0,sizeof(ll)*(1<<(m+1)));
 84         
 85         d[0][m][0]=1; //filled of blocks.
 86         
 87         for(int i=1;i<=n;i++) //foreach line
 88         {
 89             for(int k=0;k<1<<m;k++) 
 90             d[i][0][k]=d[i-1][m][k];
 91             
 92             for(int j=1;j<=m;j++) //foreach column
 93             {
 94                 int t=j-1;
 95                 for(int k=0;k<1<<(m+1);k++) //foreach state
 96                 {
 97                     ull&D=d[i][j][k];
 98                     bool a=exist(k,t);
 99                     bool b=exist(k,m);
100                     
101                     if(M[i][j])
102                     {
103                         if(!a && !b) D=d[i][j-1][trs(k,t,3)];
104                         else if(a && b) D=d[i][j-1][trs(k,t,0)];
105                         else D=d[i][j-1][trs(k,t,1)]+d[i][j-1][trs(k,t,2)];
106                     }
107                     else
108                     {
109                         if(a || b) D=0;
110                         else D=d[i][j-1][trs(k,t,0)];
111                     }
112                 }
113             }
114         }
115         printf("Case %d: There are %I64u ways to eat the trees.\n",++cc,d[n][m][0]);
116     }
117     
118     
119     return 0;
120 }
View Code

看题解发现几乎所有人都在用格子的左上轮廓表示状态,而我在用右下...于是乎又不能照抄代码了TAT

推转移推了好久Orz....虽然说这个题的转移在常规插头DP中显然不算难Orz...
另外我设了一个固定的位来表示竖直的那一条轮廓线状态......但是好像其他题解都是直接把它当做普通轮廓线处理?

咦我好像用了I64u..居然没PE?

 

...

 

转载于:https://www.cnblogs.com/DragoonKiller/p/4595664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义控件详解(四):Paint 画笔路径效果

Paint 画笔 &#xff0c;即用来绘制图形的"笔" 前面我们知道了Paint的一些基本用法&#xff1a; paint.setAntiAlias(true);//抗锯齿功能 paint.setColor(Color.RED); //设置画笔颜色 paint.setStyle(Style.FILL);//设置填充样式 paint.setStrokeWidth(10);//设…

C++之undefined reference to “ssl::first::first()“

1、错误 只写了一个简单的C继承类&#xff0c;就出现了这个错误 undefined reference to "ssl::first::first()" 2、原因 我在second类里面继承了first类&#xff0c;但是在first类里面&#xff0c;我把构造函数写成了 first();然后这个函数有没有实现&#xff0c;…

qt中c语言怎么显示图片和文字,Qt中在图片上叠加显示文字

如何在win7上安装ant-design1.首先要安装务必确认 Node.js 已经升级到 v4.x 或以上. 2.打开cmd,输入"npm install antd-init -g",安装antd(可以自己先指定安装目 ...&lbrack;TopCoder&rsqb; SRM&lowbar;594&lowbar;DIV2&period;250好长一段时间没…

2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级

去年.NET Conf China 技术大会上&#xff0c;我给大家分享了主题《轻松玩转.NET大规模版本升级》&#xff0c;今天把具体分享的内容整理成一篇博客&#xff0c;供大家研究参考学习。一、先说一下技术挑战和业务背景我们公司&#xff1a;特来电新能源股份有限公司&#xff1a;中…

HDU4462-稻草人

思想不难&#xff0c;代码不易&#xff0c;且敲且珍惜。 枚举的方式&#xff0c;假设有十个位置可以放稻草人&#xff0c;用二进制的形式转换一下&#xff0c;对每种情况判断是否全被覆盖&#xff0c;记录成功时稻草人的个数&#xff0c;每次比较选出最小的。 注意一个陷阱&…

OC-归档和解归档

1 //归档:将对象数据存储到文件的过程 NSArchiver2 //反归档:从文件中读取数据到对象中的过程3 4 int main(int argc, const char * argv[]) {5 autoreleasepool {6 7 #if 08 //使用系统的方法进行归档 NSArchiver9 NSDictionary *mutDic [NSMu…

推荐电影 奥黛丽赫本的十大经典电影 1953-1989

奥黛丽赫本的十部经典电影 1.《罗马假日》 &#xff08;Roman Holiday&#xff0c;1953&#xff09; 导演&#xff1a;威廉惠勒 风情指数★★★★★ 看点&#xff1a;奥黛丽赫本和格里高利派克的完美组合 如果没有奥黛丽赫本&#xff0c;或许《罗马假日》只会作为一部平庸…

C和C++之用extern “C“实现它们之间的互调

1、extern "C"的解释 一个C++程序包含其它语言编写的部分代码。C++编写的代码片段可能被使用在其它语言编写的代码中,不同语言编写的代码互相调用是困难的,甚至是同一种编写的代码但不同的编译器编译的代码。例如,不同语言和同种语言的不同实现可能会在注册变…

ASP.NET Core基于滑动窗口算法实现限流控制

前言在实际项目中&#xff0c;为了保障服务器的稳定运行&#xff0c;需要对接口的可访问频次进行限流控制&#xff0c;避免因客户端频繁请求导致服务器压力过大。而AspNetCoreRateLimit[1]是目前ASP.NET Core下最常用的限流解决方案。查看它的实现代码&#xff0c;我发现它使用…

android 资源文件获取啥退,重拾Android之路之获得各种资源文件的方法

引言通常我们会在项目中频繁获取color、raw、drawable、mipmap、string等资源文件。因此&#xff0c;今天整理下获取资源文件的工具类方法。最新通用方法ContextCompat.getColor(this,R.color.activity_bg);ContextCompat.getDrawable(this,R.drawable.leak_canary_icon);最近在…

linux操作系统cp命令

转载于:https://www.cnblogs.com/skl374199080/p/3863918.html

WPF将数据库和GridView绑定并更改GridView模板

首先来看一下如何使用GridView,在前台的话代码如下&#xff1a;这里仅仅举出一个例子&#xff0c;GridView是作为子项嵌套在ListView中的&#xff0c;这里的数据源是通过绑定的方式来绑定到GridView中的。 <ListView Margin"15,115,15,48" Name"lstProducts&…

sql必读的九本书

2019独角兽企业重金招聘Python工程师标准>>> 原文地址 直接上书(书籍以后会陆续加上去)书籍下载地址 《MySQL必知必会》《SQL学习指南&#xff08;第2版 修订版&#xff09;》《MySQL技术内幕——InnoDB存储引擎》《Redis设计与实现》《ZooKeeper&#xff1a;分布式…

C语言之加入头文件<stdbool.h>可以使用true和false

1、头文件<stdbool.h>介绍 &#xff08;1&#xff09;使用了<stdbool.h>后&#xff0c;可使用true和false来表示真假。 &#xff08;2&#xff09;在循环语句中进行变量声明是C99中才有的&#xff0c;因此编译时显式指明 gcc -stdc99 prime.c 2、最简单的例子 3、…

Nginx负载均衡+转发策略

负载均衡负载均衡(详解)https://cloud.tencent.com/developer/article/1526664--示例1upstream www_server_pool { server 10.0.0.5; server 10.0.0.6&#xff1a;80 weight1 max_fails1 fails_timeout10s; server 10.0.0.7&#xff1a;80 weight1 max_fails2 fails_timeo…

ftp 断点续传 Android,Android使用FTP实现断点续传

Android使用FTP实现断点续传断点续传指的是在下载或上传时&#xff0c;将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分&#xff0c;每一个部分采用一个线程进行上传或下载&#xff0c;如果碰到网络故障&#xff0c;可以从已经上传或下载的部分开始继续上传下载未…

教育行业的互联网焦虑症

2019独角兽企业重金招聘Python工程师标准>>> 文/阑夕 2007年&#xff0c;前新东方名师刘一男在新东方在线&#xff08;网校&#xff09;上的全年课程收入是三千元&#xff0c;四年之后的2011年&#xff0c;这个数字飙升到了四十万&#xff0c;已经和刘一男当年实体…

常见的几种RuntimeException

一般面试中java Exception&#xff08;runtimeException &#xff09;是必会被问到的问题常见的异常列出四五种&#xff0c;是基本要求。更多的。。。。需要注意积累了常见的几种如下&#xff1a;NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常。…

Android之Error: ‘L‘ is not a valid file-based resource name character解决办法

1、问题 Error:Execution failed for task :mergeBYODReleaseResources.> /home/chenyu/Android_dev/sangfor/yangzhoushizhenghu/20161229_M7.3_R3/EMM/Source/Android/aWork/res/drawable-mdpi/LOGO.png: Error: L is not a valid file-based resource name character: Fi…

零基础学人工智能:TensorFlow 入门例子

识别手写图片 因为这个例子是 TensorFlow 官方的例子&#xff0c;不会说的太详细&#xff0c;会加入了一点个人的理解&#xff0c;因为TensorFlow提供了各种工具和库&#xff0c;帮助开发人员构建和训练基于神经网络的模型。TensorFlow 中最重要的概念是张量&#xff08;Tenso…