博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1699 Best Sequence dfs
阅读量:5295 次
发布时间:2019-06-14

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

题目: 

无意间A了。。超时一次,加了一句 if(len > ans)return; 然后就A了,dfs题,没有太多好说的,代码写的效率高一点就行。

1 #include 
2 #include
3 4 char str[10][25]; 5 bool vis[10]; 6 int lenth[10]; 7 int ans, n; 8 9 void dfs(int cnt, int x, char tmp[], int len)10 {11 if(len > ans)return;12 vis[x] = 1;13 if(len == 0)14 {15 strcpy(tmp, str[x]);16 len = lenth[x];17 }18 else19 {20 int add = (len > lenth[x]) ? len - lenth[x] : 0;21 bool ok = 0;22 while(add < len)23 {24 ok = 1;25 for(int j = 0; j+add < len; j++)26 {27 if(tmp[j+add] != str[x][j])28 {29 ok = 0;30 break;31 }32 }33 if(ok)34 {35 int k = len - add;36 while(k < lenth[x])37 tmp[len++] = str[x][k++];38 break;39 }40 add++;41 }42 if(!ok)43 {44 strcpy(tmp+len, str[x]);45 len += lenth[x];46 }47 }48 for(int j = 0; j < n; j++)49 {50 if(!vis[j])51 dfs(cnt-1, j, tmp, len);52 }53 vis[x] = 0;54 if(cnt == 0 && ans > len)55 {56 ans = len;57 }58 }59 60 int main()61 {62 char tmp[210];63 int t;64 scanf("%d", &t);65 while(t--)66 {67 memset(vis, 0, sizeof(vis));68 ans = 0x3f3f3f3f;69 scanf("%d", &n);70 for(int i = 0; i < n; i++)71 {72 scanf("%s", str[i]);73 lenth[i] = strlen(str[i]);74 }75 for(int i = 0; i < n; i++)76 dfs(n-1, i, tmp, 0);77 printf("%d\n", ans);78 }79 return 0;80 }
View Code

 

转载于:https://www.cnblogs.com/wolfred7464/p/3442848.html

你可能感兴趣的文章
java cooki的使用
查看>>
more 分页显示文件内容
查看>>
ubuntu18 tensorflow cpu fast_rcnn
查看>>
PageHelper在Mybatis中的使用
查看>>
POJ 1742 Coins
查看>>
Spring Boot -- Start Up
查看>>
JS常用各种正则表达式(汇总)
查看>>
UVa1225 数数字
查看>>
Pattern Evaluation
查看>>
kindle--瓦尔登湖
查看>>
C++new/delete相关知识点详解
查看>>
spark使用Hive表操作
查看>>
[java]Clipboard:实现复制粘贴
查看>>
with as 如何工作
查看>>
unix设计十七条原则之一(unix编程艺术笔记)
查看>>
获取本月最后一天23点59分59秒
查看>>
Cookie实现:您曾经浏览过的商品记录
查看>>
windows安装多个版本的jdk,解决java-version和javac-version版本不一致的问题
查看>>
Python使用dict和set
查看>>
英语冷笑话
查看>>