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

本文共 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

你可能感兴趣的文章
ZH奶酪:PHP判断图片格式的7种方法
查看>>
java中给main传参的方式
查看>>
Git常用
查看>>
springboot实现邮件发送
查看>>
Python3.x:抢票
查看>>
前端三大主流框架的对比React、Vue、Angular 所谓是是三分天下
查看>>
SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解
查看>>
从开发消费者变成开发生产服务者
查看>>
玩转html5(三)---智能表单(form),使排版更加方便
查看>>
JavaSE-17 泛型
查看>>
net core静态文件 访问除默认目录文件配置
查看>>
mysql—数据库优化——如何选择合适的索引
查看>>
数据库基础
查看>>
百度地图API示例之添加自定义控件
查看>>
计时器
查看>>
Spring学习笔记——Spring MVC表单控制器(SimpleFormController)
查看>>
c++学习笔记之函数重载和模板理解
查看>>
完美世界笔试题-递增子序列B-最长递增子序列打印
查看>>
ImageView实现适屏和裁剪图片功能
查看>>
iOS开发--1.对runtime的理解和整理
查看>>