【模拟】【递归】【dfs】恐怖的奴隶主

恐怖的奴隶主

题目大意:

有4个bigbob(我们简称BB),每个BB有自己的初始血量(最大为k),当某个BB死后,其他受伤的BB会在最左边的空格召唤一个最大血量为s[t]的BB(t为当前受伤BB的血量),现在小明可以发动魔法,从左到右依次对每个BB造成一点伤害,现在小明发现某种情况下回有循环,现在问有那些情况是在循环中的

输入样例

2 
2 

输出样例

31 

样例解释

Bigbob最多有2血,满血bigbob受伤会召出新的。
循环的初始状态有:
(2,1,0,0),(1,2,0,0),(2,0,1,0),(2,1,1,0),(0,2,1,0),(1,2,1,0),(2,2,1,0) ,(1,0,2,0),(0,1,2,0),(1,1,2,0),(2,1,2,0),(2,1,0,1),(0,2,0,1),(1,2,0,1),(0,2,1,1),(1,2,1,1),(0,0,2,1),(1,0,2,1),(0,1,2,1),(1,1,2,1),(2,1,2,1),(0,2,2,1),(1,2,2,1),(2,1,0,2) ,(1,2,0,2),(2,0,1,2),(2,1,1,2),(0,2,1,2),(1,2,1,2),(2,2,1,2),(2,1,2,2)
共31种。

数据范围

对于30%的数据,k≤5;
对于70%的数据,k≤10, a[i]=k;
对于100%的数据,k≤15, 1≤a[i]≤k。

解题思路:

先dfs枚举出所有情况,然后模拟一下,判断是不是在循环中就可以了

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int k,ans,z[10],s[20],p[20][20][20][20],num[20][20][20][20];
void st(int aa,int bb,int cc,int dd)
{if(p[aa][bb][cc][dd]) return;//到过了p[aa][bb][cc][dd]=1;//记录int a=aa,b=bb,c=cc,d=dd;bool pp=false;//模拟if (a==1) pp=true;a=max(a-1,0);//-1if (a)//只是受伤if (!b) b=s[a];//找位置建BBelse if (!c) c=s[a];else if (!d) d=s[a];if (b==1) pp=true;b=max(b-1,0);if (b)if (!a) a=s[b];else if (!c) c=s[b];else if (!d) d=s[b];if (c==1) pp=true;c=max(c-1,0);if (c)if (!a) a=s[c];else if (!b) b=s[c];else if (!d) d=s[c];if (d==1) pp=true;d=max(d-1,0);if (d)if (!a) a=s[d];else if (!b) b=s[d];else if (!c) c=s[d];if(a+b+c+d==0||!pp)//判断是否结束了,或不在循环中{num[aa][bb][cc][dd]=2;//记录return;}st(a,b,c,d);if (num[a][b][c][d]==2) num[aa][bb][cc][dd]=2;//递归返回值else num[aa][bb][cc][dd]=1;
}
void dfs(int dep)
{if (dep>4){if (z[1]!=z[2]||z[2]!=z[3]||z[3]!=z[4]) st(z[1],z[2],z[3],z[4]);if (num[z[1]][z[2]][z[3]][z[4]]==1) ans++;return;}for (int i=0;i<=k;++i){z[dep]=i;//枚举每个位置dfs(dep+1);}
}
int main()
{scanf("%d",&k);for (int i=1;i<k;++i)scanf("%d",&s[i]);dfs(1);printf("%d",ans);//输出
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[2020.11.4NOIP模拟赛]简单的打击【NTT】

正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列&#xff0c;要求重排后同位置的相加后众数的个数最多。 解题思路 定义aia_iai​为第一个序列中iii的出现次数&#xff0c;那么同理有bbb 不难对于每个众数iii的出现次数cic_ici​&…

Reordering the Cows

牛客网传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 链接&#xff1a;https://ac.nowcoder.com/acm/contest/4860/B 来源&#xff1a;牛客网 题目描述 Farmer John’s N cows (…

Educational Codeforces Round 54 (Rated for Div.2)

Educational Codeforces Round 54 (Rated for Div.2) D. Edge Deletion 题意&#xff1a;一张n个点的无向图&#xff0c;保留其中k条边&#xff0c;使得有尽可能多的点与1的最短路长度不变。 做法&#xff1a;求出最短路树&#xff0c;然后自底向上删边即可。 #include <bit…

回顾4180天在腾讯使用C#的历程,开启新的征途

今天是2018年8月8日&#xff0c;已经和腾讯解除劳动关系&#xff0c;我的公司正式开始运营&#xff0c;虽然还有很多事情需要理清&#xff0c;公司官网也没有做&#xff0c;接下来什么事情都需要自己去完成了&#xff0c;需要一步一个脚印去完善&#xff0c;开启一个新的征途。…

【dfs】【拓扑排序】组合树

组合树 题目大意&#xff1a; 有一棵树&#xff0c;每个点都有自己的原颜色和目标颜色&#xff08;黑或白&#xff09;&#xff0c;现在深度不小于k的点可以让自己祖宗k代k个点的颜色全部取反&#xff0c;现在问当前树是否能变成目标树 输入样例 2 3 2 1 2 2 3 0 0 0 1 0 1…

P5906-[模板]回滚莫队不删除莫队

正题 题目链接:https://www.luogu.com.cn/problem/P5906 题目大意 nnn个数字&#xff0c;mmm个询问[l,r][l,r][l,r]中最远的相同数字对。 解题思路 我们考虑如何用莫队维护&#xff0c;对于一个询问[l,r][l,r][l,r]&#xff0c;我们先按照lll的块排再按照rrr排&#xff0c;定…

Secret Code(原题和变形题)

洛谷传送 牛客网题一 牛客网题二 没错牛客网有两个题&#xff0c;牛客网题一和洛谷是一样的题&#xff0c;牛客网题二是题一的变形 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 链…

Codeforces Round #520 (Div. 2)

Codeforces Round #520 (Div. 2) D. Fun with Integers 题意&#xff1a;a与b之间有边&#xff0c;当且仅当存在一个\(x\)使得\(a*b x\)或 \(a*x b\)&#xff0c;这条边的边权为\(|x|\)&#xff0c;保证\(|a|,|b|,|x|<n\)&#xff0c;问一条最长的不走重复边的路径的长度是…

稳定工作和创业之间的抉择

早上写的文章《回顾4180天在腾讯使用C#的历程&#xff0c;开启新的征途》是我在腾讯写的最后一篇对过往10年在腾讯使用C#语言的总结&#xff0c;今天收到反馈有人在造谣腾讯开始去.net&#xff0c;我被迫辞职了。这非常的不负责任&#xff0c;我必须写这篇文章来辟谣。要说腾讯…

初二模拟赛总结(2019.8.7)

成绩&#xff1a; rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111hkyhkyhky180180180100100100808080000000222lyflyflyf170170170100100100707070000000333tjhtjhtjh160160160100100100404040000202020444fyfyfy160160160606060100100100000000555cyzcy…

牛客2020年愚人节比赛

欢乐的一晚上 题目链接 其实做做也挺好&#xff0c;脑筋急转弯&#xff0c;不需要算法不需要数据结构&#xff0c;纯娱乐 还有不知道是哪位哥的&#xff0c;心疼一下 题解 注&#xff1a;一下题解没必要较劲&#xff0c;欢乐局而已 对不对无所谓&#xff0c;换了最重要奥 A题ra…

P4655-[CEOI2017]Building Bridges【斜率优化dp,CDQ分治】

正题 题目链接:https://www.luogu.com.cn/problem/P4655 题目大意 nnn座桥&#xff0c;删除第iii座会产生wiw_iwi​的代价&#xff0c;相邻的两座桥i,ji,ji,j会产生(hi−hj)2(h_i-h_j)^2(hi​−hj​)2的代价&#xff0c;要求代价最小。 解题思路 设fif_ifi​表示留到第iii座桥…

Codefroces1077F2. Pictures with Kittens (hard version)

Codefroces1077F2. Pictures with Kittens (hard version) 做法&#xff1a;裸的单调队列优化dp #include <bits/stdc.h> #define P pair<ll,ll> #define fr first #define sc second typedef long long ll; using namespace std; int n, m, x; ll dp[5002][5002],…

IdentityServer4 知多少

1. 引言现在的应用开发层出不穷&#xff0c;基于浏览器的网页应用&#xff0c;基于微信的公众号、小程序&#xff0c;基于IOS、Android的App&#xff0c;基于Windows系统的桌面应用和UWP应用等等&#xff0c;这么多种类的应用&#xff0c;就给应用的开发带来的挑战&#xff0c;…

【线段树】矮人排队(jzoj(gz) 3236)

矮人排队 jzoj &#xff08;gz&#xff09;3236 题目大意&#xff1a; 有n个人&#xff0c;高度分别为1,2……n&#xff08;高度按输入来看&#xff09;&#xff0c;现在有两种操作 1&#xff1a;把第x个人和第y个人换一下 2&#xff1a;询问高度为A&#xff0c;A1……B这B-…

牛客网【每日一题】4月2日 月月查华华的手机

牛客网链接 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 月月和华华一起去吃饭了。期间华华有事出去了一会儿&#xff0c;没有带手机。月月出于人类最单纯的好奇心&#…

P3466-[POI2008]KLO-Building blocks【Treap】

正题 题目链接:https://www.luogu.com.cn/problem/P3466 题目大意 nnn个数&#xff0c;每次可以让一个111或−1-1−1&#xff0c;要求操作次数最少使得有连续kkk个相同的。 解题思路 枚举是哪kkk个&#xff0c;然后用平衡树&#xff08;或对顶堆&#xff09;维护中位数和比中…

Codeforces1080F. Katya and Segments Sets

Codeforces1080F. Katya and Segments Sets 题意&#xff1a;给定n个集合&#xff0c;每个集合里有一些区间\([l_i,r_i]\)&#xff0c;有m次询问&#xff0c;每次询问区间\([x,y]\)中&#xff0c;是否包含了集合a到集合b中每个集合至少一个区间。 做法&#xff1a;按区间右端点…

【二分】Best Cow Fences(poj 2018)

Best Cow Fences poj 2018 题目大意&#xff1a; 给出一个正整数数列&#xff0c;要你求平均数最大&#xff0c;长度不小于M的字串&#xff0c;结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽N⩽100,0001\leqslant N \leqslant 100,0001⩽…

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候&#xff0c;发现了一个号称专门针对离散实序列的变换&#xff0c;经分析总运算量为普通\(FFT\)的几乎一半&#xff0c;而且完全没有复数。这么强的吗&#xff1f;于是花了一个下午&#xff0c;去…