博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯2014_3 李白打酒
阅读量:4216 次
发布时间:2019-05-26

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

思路一:利用全排列进行枚举
#include
#include
using namespace std;char a[] = "aaaaabbbbbbbbbb";int main() { int ans = 0; do{ int jiu = 2; if(a[14] != 'b') continue; for(int i = 0; i < 15; ++i){ if(a[i] == 'a') jiu *= 2; if(a[i] == 'b') jiu -= 1; } if(!jiu) ++ans; }while(next_permutation(a,a+15));//这里有可以直接列举到 第14个 因为最后一定是花 printf("%d",ans) ; return 0; }

思路二:dfs 1
#include
int ans;char a[20];void dfs(int dian,int hua,int jiu,int s) {// if(dian < 0 || hua < 0 || jiu < 0)// return ; if(!dian && !hua && !jiu && a[14] == 'b')//这里 注意 最后一定是花 ++ans; if(dian > 0){ a[s] = 'a'; dfs(dian-1,hua,jiu*2,s+1); } if(hua > 0){ a[s] = 'b'; dfs(dian,hua-1,jiu-1,s+1); } }int main() { int jiu = 2; ans = 0; dfs(5,10,2,0); printf("%d\n",ans); return 0; }

最后必须是花 ,但是不能最后结果酒是0就可以了  例如 在某一位置为花 此时酒为0 在其之后遇到的全是店 这个
也是满足 dfs条件 ans会加的  但是 不满足题意。

思路3:dfs 2
#include
int a[20];int ans;void dfs(int pos, int sum, int type) { if(sum < 0) return ; a[pos] = type; if(pos == 15){ if(type != 1) return ; if(sum == 0){ int dian = 0; int hua = 0; for(int i = 1; i <= 15; ++i){ if(a[i] == 0) ++dian; else if(a[i] == 1) ++hua; } if(dian == 5 && hua == 10) ++ans; } return ; } dfs(pos+1,sum-1,1); dfs(pos+1,2*sum,0); }int main() { for(int i = 0; i < 20; ++i) a[i] = -1; ans = 0; dfs(0,2,0);//这是 第0次 type可以 取0或1 不影响结果 //dfs(0,2,1);//不可以 再次尝试 type = 1 否则结果翻倍 printf("%d\n",ans); return 0; }

这里 按照从1开始,对15个位置进行判断 注意 因为 是从0(无效位置)开始 所以 0位置的type 等于0 或者1 都不影响结果

转载地址:http://vqimi.baihongyu.com/

你可能感兴趣的文章
小练习 - 排序:冒泡、选择、快排
查看>>
SparkStreaming 如何保证消费Kafka的数据不丢失不重复
查看>>
Spark Shuffle及其调优
查看>>
数据仓库分层
查看>>
常见数据结构-TrieTree/线段树/TreeSet
查看>>
Hive数据倾斜
查看>>
TopK问题
查看>>
HQL排查数据倾斜
查看>>
DAG以及任务调度
查看>>
LeetCode——DFS
查看>>
MapReduce Task数目划分
查看>>
ZooKeeper分布式锁
查看>>
3126 Prime Path
查看>>
app自动化测试---ADBInterface驱动安装失败问题:
查看>>
RobotFramework+Eclipse安装步骤
查看>>
测试的分类
查看>>
photoshop cc2019快捷键
查看>>
pycharm2019版本去掉下划线的方法
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
leetcode 13: Roman to Integer
查看>>