PAT-L3-球队“食物链”-dfs-状压-set】的更多相关文章

用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表行数,j代表当前行棋子的状态.j的二进制中,1代表有旗子,0代表无棋子. 贴代码~状压DP果然快一点. #include <cstdio> #include <cstring> int n,k,count; ][]; ]; ][]; int main() { // freopen(&q…
Problem 1608 - Calculation Time Limit: 500MS   Memory Limit: 65536KB    Total Submit: 311  Accepted: 82  Special Judge: No Description Today, Alice got her math homework again! She had n integers, and she needed to divide them into several piles or o…
题目链接[http://codevs.cn/problem/1358/] 题意:这个游戏在一个有10*10个格子的棋盘上进行,初始时棋子位于左上角,终点为右下角,棋盘上每个格子内有一个0到9的数字,每次棋子可以往右方或下方的相邻格子移动,求一条经过数字之和最小且经过0到9的所有数字的合法路径,输出其长度.(经过的数字包括左上角和右下角). 思路一:深搜(DFS),因为他只可以向左走或又走,那么每次有两个方向,走到终点的时候,最多走了20步,所以深度最深为20,可解. #include<cstdi…
L3-015. 球队“食物链” 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度.“食物链”为一个1至N的排列{ T1 T2 ... TN },满足:球队T1战胜过球队T2,球队T2战胜…
二维状压写成一维状压,省略加上第i条边这一维 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; vector<pair<]; <<]; ]; bool dfs(int now,int fa,int root,int pos){//当前结点,父节点,终结点,所在边编号 if(now==root) ; for(auto it:v[now]){ if(it.first!=fa&a…
题目链接 题意 给出n个王国和n*n的矩阵,mp[i][j] 代表第 i 个王国欠第 j 个王国 mp[i][j] 块钱.如果当前的王国处于负债状态,那么这个王国就会被消除,和它相连的王国的债务都会被清除.因此会产生连锁反应,使得最后可能只剩下一个王国.输出对于每种情况,最后可能只剩下的王国有哪些. 思路 一开始的想法就是DFS+状压,但是TLE了,队友和我说没记录状态,那样的复杂度差不多是O(n!)的.后面队友写了一个,疯狂WA. 想了好久都没发现的错误:当时做法是全局记录一个原始的图和一个当…
第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标从1开始)   [1<=l,r<=1e18]解:  没想到第一题这么水.直接前缀和+mod就可以了,再判一下边界.注意1e18不需要高精度.long long 有9*10^18. #include<iostream> #include<cstdio> #include<…
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][Status][Discuss] Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K &…
题意: 如果有2个排列a,b,定义序列c为: c[i] = (a[i] + b[i] - 2) % n + 1 但是,明显c不一定是一个排列 现在,给出排列的长度n (1 <= n <= 16) 问有多少种a,b的排列的组合的方案,使得得到的c也是一个排列 排列的组合a = x,b = y 与 排列的组合a = y,b = x算是2种方案 思路: 有3个排列,不妨假设排列a 为1,2,3,...,n 这样结果再 * n! 就是答案 考虑状压dp j是一个16位的数,记录b的n个数被用了哪些数…
题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴力试试,反正数据量看起来不大才7,但是...TLE了,又换了一个暴力方法,2秒多过了,差点啊. 其实这是一个状压DP,dp[i][s]表示在第 i 列,在集合 s 中有方法数,那么怎么转移呢,这个还是挺简单的,就是判断第i+1列是不是比第 i 列都大于等于就ok了, 输入时先把行,转化成列,再计算,…