博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
阅读量:6478 次
发布时间:2019-06-23

本文共 1407 字,大约阅读时间需要 4 分钟。

 

1 /* 2     题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 3     记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操作必然是1红1黑 4     考虑三种情况:a[]连续两个颜色相同,输出11;b[]连续两个相同,输出22; 5                     a[x] != b[y], 输出12;否则Impossible 6     详细解释:http://blog.csdn.net/jsun_moon/article/details/10254417 7 */ 8 #include 
9 #include
10 #include
11 #include
12 #include
13 #include
14 using namespace std;15 16 const int MAXN = 1e3 + 10;17 const int INF = 0x3f3f3f3f;18 char a[MAXN], b[MAXN];19 bool dp[MAXN][MAXN];20 21 bool DFS(int x, int y)22 {23 if (!x && !y) return true;24 if (!dp[x][y]) dp[x][y] = true;25 else return false;26 27 if ((x-2)>=0 && a[x] != a[x-1] && DFS (x-2, y))28 {29 printf ("11"); return true;30 }31 if ((y-2)>=0 && b[y] != b[y-1] && DFS (x, y-2))32 {33 printf ("22"); return true;34 }35 if ((x-1)>=0 && (y-1)>=0 && a[x] != b[y] && DFS (x-1, y-1))36 {37 printf ("12"); return true;38 }39 40 return false;41 }42 43 int main(void) //URAL 1501 Sense of Beauty44 {45 //freopen ("V.in", "r", stdin);46 47 int n;48 while (scanf ("%d", &n) == 1)49 {50 memset (dp, false, sizeof (dp));51 scanf ("%s", a+1); scanf ("%s", b+1); 52 53 if (!DFS (n, n)) puts ("Impossible");54 else puts ("");55 }56 57 return 0;58 }59 60 /*61 Impossible62 */

 

转载于:https://www.cnblogs.com/Running-Time/p/4495645.html

你可能感兴趣的文章
SpringMVC源码解析
查看>>
使用MPMoviePlayerController播放视频
查看>>
Eclipse 自动下载源代码与文档
查看>>
CentOS7安装hive-2.1.0
查看>>
linux磁盘管理系列一:磁盘配额管理
查看>>
Feign支持PATCH方法
查看>>
[Java 并发编程实战] 对 volatile 变量进行实例验证(内含源码)
查看>>
horizon开发环境搭建及keystone使用总结
查看>>
见缝插针 一个小游戏
查看>>
安卓4.4系统 textview报空指针
查看>>
apache 启动报错 httpd: Could not reliably determine th
查看>>
js获取json对象
查看>>
centos 下载安装mysql
查看>>
Redis主从切换,官方说明(中文翻译)
查看>>
iphone 资源
查看>>
鸟哥Linux私房菜基础学习篇 第二部分 Linux 文件、目录与磁盘格式_Linux文件权限与 目录配置_Linux磁盘与文件系统管理...
查看>>
Apache Maven Dependency Plugin使用记录
查看>>
css3 Tab Menus Without Javascript
查看>>
android P设置状态栏字体图标颜色
查看>>
【ZZ】HTTP status codes
查看>>