摘要:
题意:给定一些单词,这些单词必须要是一个目标串的子串,同时给定一些串,这些串不能够出现在目标串中,其余一些串只会带来不同附加值。现在问满足前两者的情况下,要求附加值最大。数据给定一个原始串,现在要求在这些串中删除一些字符,输出在满足要求的情况下删除最少的字符并保证附加值尽可能的大。分析:这题的一个暴力的方法肯定就是对于每个字符枚举删或者不删,然后选择一种方案即可。在这个蛮力法的后面注意到其实在枚举的时候还是有很多重复计算的,比如前a个字符删除或者不删除某个字符对于后面的选择是一样的,而题目要求拥有所有的必有串,因此可以将所有的必有串建立一个ac自动机,然后根据枚举在ac自动机相应节点(状态)的 阅读全文
摘要:
题意:有来自n个专业的学生,每个专业分别有ai个同学,现在要将这些学生排成一行,使得相邻的两个学生来自不同的专业,问有多少种不同的安排方案。分析:首先将所有专业的学生视作一样的,最后再乘以各自学生的数量的阶乘。排列的时候通过动态规划来处理,设状态为前i个系,一共有j个位置相邻位置来自同系,然后转移。具体见代码注释。#include #include #include #include #include using namespace std;typedef long long LL;const LL mod = (int)(1e9)+7;LL A[50];LL C[500][500]; LL 阅读全文
摘要:
题意:给定一个九宫格,然后能够选择某行或者是某列滚动,每个小方格分为上下左右四个块,每个块可以涂上4种不同的颜色。问最少使用多少步能够使得所有相同颜色相互联通。分析:由于九宫格的所有的状态只有9!(362880)种,于是想起了先对每个格子进行标号,然后根据逆序对的数量进行一个递增进制数的hash处理,这样bfs搜索就能够去重了,接着只需要判断每个状态是否满足联通即可。这里的判定选择了先统计了不同颜色格子的数量然后dfs搜索,应该并查集也可以搞。滚动使用指针滚动即可,对于不能动的格子该格子所在行和列都不能够滚动。#include #include #include #include #inclu 阅读全文
摘要:
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种。分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快,但是骑士的话就需要对每一个格子分两种情况进行,情况非常的多,搜索肯定是会超时的。状态压缩DP就是另外一个思路的,理论上时间复杂度是8*n*2^24,但是由于限制比较多,也就能够解决了。设dp[i][j][p][q]表示第i-1行压缩后的状态是p,第i行压缩后的状态为q,且之前一共使用了j个骑士的方案数。按照题意递推即可。#include #include #include #include #inc 阅读全文
摘要:
题意:链接分析:每一个D或者是E点往四面延伸,并且赋一个特殊的值,能看到D点的点赋值为1,能看到E点的点赋值为1000,这是因为最多100步,因此最后可以根据除以1000和对1000取模来得出某个状态的值,那么这个数值对应的状态就有四种,BFS搜索即可。之前没有考虑到折回这种情况,原因就是状态没有进行完全的搜索。后面看了网上的写法中多是直接开设了四维的一个状态,只需记录某状态走还是没走,也就没有这种折回的考虑了。#include #include #include #include #include #include using namespace std;const int N = 105; 阅读全文
摘要:
题意:就是平时玩的十滴水游戏,游戏者拥有一定的水滴,能够滴在某些位置,如果一个点上的体积超过了4就会爆炸,向四周传递一个小水滴。该题就是要求模拟这个过程。分析:这里有一个问题就是不能够使用递归来处理这个过程,因为水滴拥有速度,如果是递归调用的话,那么可能本来应该同时到达某点的水滴变成不同时间到达了。处理该题使用了两个队列,分别模拟当前时刻,和下一时刻,每次从当前时刻取出所有的水滴,再视情况处理加入到下一时刻的队列中。有个地方要注意就是同时到达某一点的水滴加上原来的水滴超过了5那么视作和5等效。#include #include #include #include #include #inclu 阅读全文
摘要:
分析:该题有2个地方要注意:所有的车要么不坐要么就坐满,这个贪心策略很容易证明是正确的,还有一点就是最后一辆车除外。#include #include #include #include #include using namespace std;const int MaX = 105;int N, K, D, S;struct Node { int ti; int qz;}seq[MaX];int dp[MaX][MaX];// dp[i][j]表示第i台车来的时候,等候人数为j时的最少开销 void solve() { memset(dp, 0xff, sizeof (dp... 阅读全文
摘要:
题意:给定一个正整数A,告知等比数列的公比为q,为这个序列能否超过一个特定的数K。解法:该题需要考虑公比的取值,当q=1,q=-1,q=0的特殊性,由于等比数列的增长速度非常快,所以可以for循环扫描过去。#include #include #include #include #include #include using namespace std;typedef long long LL;const int N = 10005;int n;int seq[N];int k1, k2;LL K;int main() { int T, ca = 0; scanf("%d", 阅读全文
摘要:
题意:很乱分析:把数据处理下,dijkstra下就行了,floyd超时了,我还想着优化一下输入,因为使用了vector和string等等,但是计算数据规模后,处理输入的时间复杂度比floyd要低一个数量级,看来还是要换成dijkstra了。#include #include #include #include #include #include using namespace std;const int N = 205;const int inf = 0x3f3f3f3f; int n, m, D1, D2, A, B;vectorvs[2];int mp1[N][N];int mp2[N][ 阅读全文
摘要:
原来生活如此精彩,对啊。手机、计算机、互联网,我们每天能够通过文字、图像等多媒体纵观有我们创造出来的文明,在智慧的河流中唏嘘不已。当我在维基百科上惊讶某人的出生在大清帝国时期,当我看到NASA在1970回答赞比亚修女为什么我们要探索宇宙,当我看到计算机图像系统的发展......我们是幸运的,这个精彩绝伦的世界被改造的越加美妙,我们越觉得这一切都应当是理所当然的,我们开始无法习惯没有这些,甚至无法习惯没有发现的日子,我们的欲望催生着这个世界不断加速前进,无论你是他的创造者还是享受者,我们都对这个世界贡献着自己的动力。 在我们创造的这个“世界”中,城市不会被杂草长满,水稻只会大规模生长那个正... 阅读全文