【HDU】1693 Eat the Trees】的更多相关文章

http://acm.hdu.edu.cn/showproblem.php?pid=1693 题意:n×m的棋盘求简单回路(可以多条)覆盖整个棋盘的方案,障碍格不许摆放.(n,m<=11) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; struct H { static const int M=1000007;…
Eat the Trees Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5079    Accepted Submission(s): 2628 Problem Description Most of us know that in the game called DotA(Defense of the Ancient), Pudge…
传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因是不愿意写暴力推断的).. 首先是简单的行列建边.源点向行建边.容量为该行元素和,汇点和列建边.容量为该列元素和.全部的行向全部的列建边,容量为K. 跑一次最大流.满流则有解,否则无解. 接下来是推断解是否唯一. 这个题解压根没看懂.还是暴力大法好. 最简单的思想就是枚举在一个矩形的四个端点.设A.D为主对角…
题目链接 题意: 给出一个n*m大小的01矩阵,在其中画线连成封闭图形,其中对每一个值为1的方格,线要恰好穿入穿出共两次,对每一个值为0的方格,所画线不能经过. 参考资料: <基于连通性状态压缩的动态规划问题> ——陈丹琦 2008年国家集训队论文 递推过程中,按照 遍历行->遍历行上每一格->遍历 “轮廓线跨过该格时所有可能的状态变化”   的顺序 这样复杂度是 O(n*m*2m+1)  (m+1是因为轮廓线上有m个单元是与列数对应的,另有一单独的竖线单元) 问题关键点在于解决 …
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1693 第一道插头 DP ! 直接用二进制数表示状态即可. #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ,M=(<<)+; int n,m,bin[N];ll dp[N][N][M]; int b[N][N]; void…
[题目分析] 吃树. 直接插头DP,算是一道真正的入门题目. 0/1表示有没有插头 [代码] #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define u64 unsigned long long #define F(i,j,k) for (int i=j;i<=k;++i) int n,m,t,a…
插头DP基础题的样子...输入N,M<=11,以及N*M的01矩阵,0(1)表示有(无)障碍物.输出哈密顿回路(可以多回路)方案数... 看了个ppt,画了下图...感觉还是挺有效的... 参考http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710343.html 以及推荐cd琦的论文ppthttp://wenku.baidu.com/view/4fe4ac659b6648d7c1c74633.html 向中学生学习~~ 感觉以后可能还会要…
题目链接 USACO 第6章,第一题是一个插头DP,无奈啊.从头看起,看了好久的陈丹琦的论文,表示木看懂... 大体知道思路之后,还是无法实现代码.. 此题是插头DP最最简单的一个,在一个n*m的棋盘上,有些点能走,有些点不能走,可以走一条回路,也可以多回路,把所有点走完,有多少种走法.. 这题的背景还是dota,还是屠夫,还是吃树...我还是不会玩屠夫啊... 学习此题,看的下面的大神的博客,图画很棒,位运算又学了一个新用法. http://blog.csdn.net/xymscau/arti…
第一道(可能也是最后一道)插头dp.... 总算是领略了它的魅力... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ][],dp[][][(<<)+]; void work(long long x) { scanf("%I64d%I64d",&n,&m); ;i<…
题目大意:要求你将全部非障碍格子都走一遍,形成回路(能够多回路),问有多少种方法 解题思路: 參考基于连通性状态压缩的动态规划问题 - 陈丹琦 下面为代码 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 12 #define S (1 << 12) int n, m; long long dp[N][N][S]; int cas = 1…
Problem Description Most of us know that in the game called DotA(Defense of the Ancient), Pudge is a strong hero in the first period of the game. When the game goes to end however, Pudge is not a strong hero any more.So Pudge’s teammates give him a n…
题意:给一个n*m的矩阵,为1时代表空格子,为0时代表障碍格子,问如果不经过障碍格子,可以画一至多个圆的话,有多少种方案?(n<12,m<12) 思路: 这题不需要用到最小表示法以及括号表示法. 以一个非障碍格子为单位进行DP转移,所以可以用滚动数组.只需要保存m+1个插头的状态,其中有一个是右插头,其他都是下插头,若有插头的存在,该位为1,否则为0,初始时都是0. 需要考虑的是,(1)如果两个边缘都是插头,那么必须接上它们:(2)如果仅有一边是插头,则延续插头,可以有两个延续的方向(下和右)…
Problem Description We have met so many problems on the tree, so today we will have a query problem on a set of trees. There are N nodes, each node will have a unique weight Wi. We will have four kinds of operations on it and you should solve them ef…
Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6. 找数字连续最大乘积子序列. 思路:这个麻烦在有负数和0,我的方法,如果有0,一切都设…
题目链接: http://codeforces.com/problemset/problem/711/C 题目大意: 给N棵树,M种颜色,已经有颜色的不能涂色,没颜色为0,可以涂色,每棵树I涂成颜色J花费PIJ.求分成K个颜色段(1112221为3个颜色段)的最小花费.无解输出-1. 题目思路: [动态规划] f[i][j][k]表示前i个树分成j段,最后一个颜色是k的花费. 根据当前这棵树是否可以涂色,上一棵树是否可以涂色转移. 直接枚举这个树和上棵树的颜色,N4居然没T. // //by c…
原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/details/8563283 优化:若物品数量(num[i])*物品重量(w[i])>背包容量(m),就相当于无限背包. 对于num[i],可以拆成若干个01背包来实现1...num[i]的全覆盖,二进制原理: 1...k中的数可以由1.2.4...2t.k-2t+1+1(2t+2 > k ≥ 2t+1)组…
[题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000. [算法]线段树+RMQ-LCA+树链的交 [题解]树链的交:记一条链为(a1,b1),LCA为c1.另一条链为(a2,b2),LCA为c2.记a1a2,a1b2,b1a2,b1b2的LCA为d1,d2,d3,d4,按深度排序后得deep[d1]<=deep[d2]<=deep[d3]<=…
[算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星2017复赛,作为送分题出现,拿来练数位DP模板了. 位数多,读入记得用字符串. 记忆化要将有关变量全部纳入. 需要取模的时候别习惯性写"+=",特别是竞速赛,改起来很难受. -1的变量前加~就和0一样了. 最后自己造数据测试了一下,记忆化搜索的速度简直全面碾压递推啊!(从此坚定了信仰) #in…
[算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的深度,所以先建树后对于一个数字依次把每次分岔开的另一边的size乘上权值累加答案. 法二:从高位到低位分组求和,即第一位1在上,0在下,则两边之间互相计算过后就再无影响,只剩下各自内部的事情再处理.由于排序后数据的有序性使分治可行. 法三:排序后对于一个数字,它和后面的数字的lowbit有单调性………
[算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ; int n,p[maxn]; char s[maxn],ss[maxn]; void manacher() { ,id=; ; ;i<=n;i++)//$不管 { if(i<mx) { p[i]=min(p[id*-i],mx-i+); } ; while…
[算法]AC自动机 [题解]本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词. 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接访问对应结点,而不用真的比较. 因此可以预处理出拥有对应节点的失配串,不用一次一次跑前跑去找一样的. 然后还有就是一个结点可能对应多个串,所以需要last使统计答案完整. AC自动机的细节标注在代码里了. AC自动机过程: [trie] for 长度 if(!ch[u][c])初始化,ch[u][c…
[算法]离散化 [题解] 答案一定存在于区间的左右端点.与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化). 让某个点的前缀和表示该点的答案. 初始sum=∑c[i] 在l[i]处加上a[i]-c[i],在r[i]+1处加上b[i]-a[i]. 从左到右计算sum并比较出最大值即可. #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #inclu…
[题意]一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通.n<=10000,T<=100. [算法]递推,DP [题解]原题链接:蓝桥杯 格子刷油漆(动态规划) 这类题目最重要的是找到一个可以计算所有情况的状态表示. 对于2*x的网格,a[x]表示从左上角出发遍历完所有格子的方案数,b[x]表示从左上角出发遍历完所有格子并在左下角结束的方案数. 显然,b[x]=2*b[x-1]. 先考虑起点在左上角,有三种情况: ①先走到对面(左下角),再往右走,a[x…
今天忽然心血来潮打开牛客网尝试了一下一站到底 前四道题都是不到二十分钟切完,然后第五道来了道计算几何 我也不会啊,于是就觉得大力随机也许可行 然鹅被精度卡到崩溃 后来我才知道 保证有解,是保证你的精度误差设置到\(10^{-3}\),有解,\(10^{-5}\)没有解 [脏话] 这题直接随机三个点求外接圆就好了,看看这个圆上有几个点,期望随机十次左右吧 注意把题里说不合法的也就是绝对值大于1e9的这样的圆都给扔掉就好了 (这也许不是篇题解,只是一篇吐槽) #include <bits/stdc+…
PS:做到第四题才发现 2,3题的路径压缩等于没写 How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14542    Accepted Submission(s): 7132 Problem Description Today is Ignatius' birthday. He invites a lot…
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, given n = 3, there are a total of 5 unique BST's. 1         3     3      2      1     \       /     /      / \      \      3     2     1      1  …
Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3   推导出递推公式即可: 对于1个元素来…
Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \…
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 这次的题目要求是得到所有的树. 我的思路:…
http://acm.hdu.edu.cn/showproblem.php?pid=2138 题意:给n个数判断有几个素数.(每个数<=2^32) #include <cstdio> using namespace std; typedef long long ll; ll ipow(ll a, ll b, ll m) { ll x=1; for(; b; b>>=1, (a*=a)%=m) if(b&1) (x*=a)%=m; return x; } ll rand…