Word Construction hiho一下第170周
来源:互联网 发布:a5源码被骗 编辑:程序博客网 时间:2024/05/16 05:36
题意:题目给出100个单词中的 N 个,从中选出尽可能多的单词,且这些单词两两之间不能含有相同的字母。
**思路:**N 最大为40。考虑爆搜,每个单词只有两种情况,要么被选择,要么没被选。且不能含有相同的字母这一点就可以用来剪枝。所以不会超时。
代码:
#include<cstdio>#include<cstring>#include<cstdlib>#include<stack>#include<queue>#include<utility>#include<vector>#include<cmath>#include<set>#include<map>#include<iostream>#include<algorithm>using namespace std;typedef long long LL;int N;char word[45][10];bool alph[30];int ans;void Dfs(int pos, int wordnum){ if(pos == N){ ans = max(ans, wordnum); return ; } Dfs(pos+1, wordnum); //没被选 bool ok = true; int len = strlen(word[pos]); for(int i=0; i<len; i++){ if(alph[word[pos][i]-'a']){ ok = false; break; //判断和之前的单词是否含有相同的字母,如果有则不能选,如果没有则可以选 } } if(ok){ for(int i=0; i<len; i++){ alph[word[pos][i]-'a'] = true; } Dfs(pos+1, wordnum+1); for(int i=0; i<len; i++){ //恢复原状,以免影响其他的Dfs alph[word[pos][i]-'a'] = false; } }}int main(){ //freopen("in.txt", "r", stdin); while(scanf("%d", &N) == 1){ for(int i=0; i<N; i++){ scanf("%s", word[i]); } memset(alph, false, sizeof(alph)); ans = 0; Dfs(0, 0); printf("%d\n", ans); } return 0;}
阅读全文
0 0
- Word Construction hiho一下第170周
- hiho一下 第143周 hiho密码
- hiho一下 第141周
- hiho一下 第139周
- hiho一下第143周
- hiho一下 第145周
- hiho一下 第167周
- hiho一下 第175周
- hiho一下 第174周
- hiho一下第56周 高斯消元
- hiho一下 第113周 Fibonacci (dp)
- [hiho一下 第128周] 后缀自动机
- [hiho一下 第129周] 后缀自动机
- [hiho一下 第130周] 后缀自动机
- hiho一下 第140周 清理海报
- hiho一下 第139周 买零食
- hiho一下 第139周 买零食
- hiho一下 第139周 买零食
- MySQL 5.7.17 安装报错CMake Error at cmake/boost.cmake:81 (MESSAGE)
- AppCompatActivity
- 2017033000C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- 集合源码学习(二):Spliterator
- (M)Dynamic Programming:304. Range Sum Query 2D
- Word Construction hiho一下第170周
- STL(下篇)
- ucosII(一)
- MongoDB&C++开发 (六)使用bsoncxx::builder::stream和$push在数组中插入元素
- 淘宝详情页广告法检测工具 淘宝违规词检测、查询 淘宝详情页违规词检测、查询
- 如何利用js制作选项卡
- namenode 异常关闭问题查询
- 2017033001c++引用与指针的区别(着重理解)
- 自己定义一个带进度的圆形进度条