ACM题解与算法
文章平均质量分 81
Must_so
Theirs not to reason why,theirs but to do and die.
展开
-
POJ 3904 Sky Code (容斥原理)
DescriptionStancu likes space travels but he is a poor software developer and will never be able to buy his own spacecraft. That is why he is preparing to steal the spacecraft of Petru. There is o原创 2016-09-04 10:09:41 · 495 阅读 · 0 评论 -
POJ 2311 Cutting Game (sg博弈)
POJ 2311 Cutting Game考虑每张纸的SG:我们称当前纸可以切成的两张纸ai,bi为当前纸的子状态那么当前纸的SG就是它所有子状态的异或和而它的每一个子状态有2张纸,也是求异或和因为每张纸的属性包括w和h,所以用到二维数组保存sg值(当然结构体保存一张纸的属性也可)#define mem(a,x) memset(a,x,sizeof(a))#include原创 2016-09-03 23:37:36 · 525 阅读 · 0 评论 -
CF 277C Game(博弈)
CF 277C Game一道恶心的博弈题。。。博弈部分是正常的NIM游戏规则,但是对于图形的处理好麻烦的说n*m的矩形网格,已经切了K条线 再两人轮流操作 合法操作是在网格上画横线或竖线长度自随意,但是必须产生新的切痕网格的边界不能切最后不能操作者败不难发现行和列是相互独立的 每一行和每一列单独看成成一堆石子,完整部分的长度就是石子个数,每切一刀就相当原创 2016-09-03 22:54:10 · 584 阅读 · 0 评论 -
POJ 2348 Euclid's Game (博弈)
POJ 2348 Euclid's Game挑程上的题 当a >= 2b时 :胜 当 a > b&&a 当 a == b时 :胜 2b计算过程中溢出了...... #include#include#include#include#include#include#define mem(a,x) memset(a,x,sizeof(a))using n原创 2016-09-02 22:26:43 · 327 阅读 · 0 评论 -
POJ 3480 John (Nim博弈)
POJ 3480 JohnN种糖 每种Ai个,每人每次从中选一种拿如果每种糖都只有1个,奇数必败偶数必胜否则,sg = 0败态 #include#include#include#include#include#include#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long原创 2016-09-02 21:53:59 · 496 阅读 · 0 评论 -
POJ 2068 Nim (博弈和DP本是一家=-=)
POJ 2068 Nim题意:2n个人围成一圈,编号为奇数的一队,编号为偶数的一队,轮流从原本S个石头的石堆进行拿石头操作每个人可拿石头范围在[1,m[i]]内(m[i]表示第i个人最多能拿的石头数)问先手(0所在的偶数队)能否取胜分析:dp[i][j]表示第i个人面对j个石头的局面 是否能胜(1/0)只要有“败”的子状态就是胜态如果子状态全为胜态则为败态状态转原创 2016-09-02 19:07:27 · 940 阅读 · 1 评论 -
POJ 1740 A New Stone Game(博弈)
POJ 1740 A New Stone Game题意:每次对某堆拿走x个石头并向非空石堆转移yi个石头x>0,yi>=0yi的含义是说可以向多个石堆转移石头 直到无法操作者败分析:1.石堆的石头数成对相等的状态为败态(例如 1 1 2 2...)2.所有不是上述情况的状态转移到全部成对相等花费的步数是1步,故为胜态对于1:完全的对称使得先手操作之后后手原创 2016-09-02 09:10:43 · 440 阅读 · 0 评论 -
POJ 1704 Georgia and Bob(博弈)
POJ 1704 Georgia and Bob挑程上是这样说的:把相邻的棋子两两组合转化成Nim游戏比如棋子坐标为 : 1 3 7 10 18 27那么看出有3堆石头分别有1,2,8个石头其中1表示3可以移到2(可以拿走1个石头)2表示10可以移到8,9(可以拿走1个或者2个石头)8表示27可以移到19,20,21...26(有8种拿石头的方法)可是这样看来只有每原创 2016-09-02 03:58:15 · 365 阅读 · 0 评论 -
POJ 2960 S-Nim(博弈)
POJ 2960 S-Nim简单的Nim游戏博弈给出可移动的数的集合问当前局面是胜还是败#include#include#include#include#include#include#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long long ll;const int原创 2016-09-02 02:16:49 · 386 阅读 · 0 评论 -
POJ 2425 A Chess Game(博弈)
POJ 2425 A Chess Game当前棋子没有可以到达的点的时候sg=0(败)以此状态转移 ,每个棋子的SG都可以求出来 也就是基础的nim博弈C++#include#include#include#include#include#include#define mem(a,x) memset(a,x,sizeof(a))using na原创 2016-09-02 02:01:00 · 558 阅读 · 0 评论 -
POJ 1678 I Love this Game!(博弈)
DescriptionA traditional game is played between two players on a pool of n numbers (not necessarily distinguishing ones). The first player will choose from the pool a number x1 lying in [a, b]原创 2016-09-02 00:38:39 · 563 阅读 · 0 评论 -
HDU 4388 Stone Game II(博弈)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4388找规律:如果所有石头数的二进制中1的总个数是奇数且n为偶数 胜如果所有石头数的二进制中1的总个数是偶数且n为奇数 胜其他情况 败//package acm.hdu2388;import java.util.*;public class Main { public原创 2016-09-01 15:16:03 · 1176 阅读 · 0 评论 -
POJ 2234 Matches Game(博弈)
http://poj.org/problem?id=2234裸的NIM//package acm.poj2234;import java.util.*;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new原创 2016-09-01 14:57:28 · 376 阅读 · 0 评论 -
POJ 3688 Cheat in the Game(作弊博弈)
poj.org/problem?id=3688站在先手的角度:如果石头数可以被偶数张卡片组和而成,则有输的可能如果石头数可以被奇数张卡片组和而成,则有赢的可能必胜:石头数只由奇数张卡片组和而成必败:石头数只由偶数张卡片组合而成平局:任意卡片组合都无法得到石头数裁判想让先手必胜只需选择根据卡片的组合先手必胜的石头数dp[i][1] = true表示石头数为i的情况可以原创 2016-09-01 11:08:10 · 718 阅读 · 0 评论 -
LightOJ 1317 (据说是概率DP的...水题)
LightOJ 1317。。。。。。其实和篮子没有关系啊,投进求也不影响概率。每次投进的概率是n*p,k次就是k*n*p。。。。。。#include#includeusing namespace std;int kas;int main(){ int T,n,m,k;cin>>T; while (T--) { double p;cin>>n>>m>>k>>p;原创 2016-08-28 12:10:58 · 777 阅读 · 0 评论 -
LightOJ 1265 (概率DP)
感觉蛮好玩的,和鹿相遇的时候,杀还是不杀呢?当鹿越来越少的时候,你遇到老虎被杀的概率就会增大,但是老虎遇到老虎相互残杀的概率也会增大。而题目也没说你杀鹿的概率是多少啊?完全没有头绪?其实仔细想想,你存活的概率只和老虎有关。因为老虎是成对死的,所以如果老虎数量是奇数,总有一天会遇到老虎,必死无疑。如果老虎数量是偶数就算概率因为概率只和老虎有关,所以只考虑,存活下来就是要每天都原创 2016-08-28 10:12:22 · 736 阅读 · 0 评论 -
概率DP入门小结
说是概率DP,其实主要是求概率和期望的问题说到DP总要有状态,每种状态可能有多种子状态一般的DP是这样:在DP过程中,当前状态必然是由多个子状态中的最优的转移而来所以一般的DP求的是最优的结果而概率不需要最优,而是实际概率所以概率DP最大的区别在于:在DP过程中,当前状态是由所有子状态的概率共同转移而来所以概率DP只是利用了DP的动态而没有规划(只有状态转移,而不需要进原创 2016-08-27 20:41:36 · 3078 阅读 · 1 评论 -
矩阵乘法学习记录+模板+例题
学习记录主讲矩阵乘法(原理、计算、功能、应用)模板为矩阵乘法和矩阵快速幂的C++代码实现例题为矩阵快速幂求斐波那契数和一个ACM的具体题目(用矩阵快速幂优化概率DP)学习记录:(from :http://www.ruanyifeng.com/blog/2015/09/matrix-multiplication.html)大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。原创 2016-08-25 10:59:37 · 16278 阅读 · 0 评论 -
树形DP整理小结
树形DP:在树上进行dp,树是递归的定义的,所以树形dp也是递归的求解,一般而言,dp[node]表示的是以node为根的子树能得到的最优解一般而言,dp[node]需要从node的子结点进行状态转移,树形dp又常常和背包结合起来,因为dp[node]的状态是由它的儿子转移而来,我们常常可以将node的n个儿子看做n个物品,要如何对这n个物品抉择得到最优的dp[node]就常用到背包的思想当然,常常dp不止node这一维,至于第二维保存什么 则根据题目来一般都是题目给出的限制条件作为dp数组的第原创 2016-08-24 15:38:21 · 2717 阅读 · 0 评论 -
有向图强连通分量的Tarjan算法
有向图强连通分量的Tarjan算法[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为转载 2016-08-24 11:08:32 · 383 阅读 · 0 评论 -
tarjan算法
说到以Tarjan命名的算法,我们经常提到的有3个,其中就包括本文所介绍的求强连通分量的Tarjan算法。而提出此算法的普林斯顿大学的Robert E Tarjan教授也是1986年的图灵奖获得者(具体原因请看本博“历届图灵奖得主”一文)。 首先明确几个概念。强连通图: 在一个强连通图中,任意两个点都通过一定路径互相连通。比如图一是一个强连通图,而图二转载 2016-08-24 09:51:08 · 335 阅读 · 0 评论 -
HDU 3642 Get The Treasury(线段树+扫描线求面积【再升级版(三维)】)
题目链接:HDU 3642 Get The Treasury嘿嘿,早在做二维的时候我就猜到会有三维的~~~线段树+扫描线求面积 :1.基础版 (HDU 1542) 2.升级版 (HDU 1255)如今遇到再次升级的版本心里小小的激动了一下从HDU 1542 单纯求面积,到HDU 1255 求覆盖次数2次及以上的面积,到HDU 3642 求覆盖次数3次及以上的体积体积的话,因为z原创 2016-08-23 09:40:59 · 807 阅读 · 1 评论 -
HDU 1255 覆盖的面积(线段树+扫描线求面积【升级版】)
http://www.cnblogs.com/scau20110726/archive/2013/04/14/3020998.html这讲得太好了,感觉做了这题对于面积覆盖的题更理解了之前写过 HDU 1542 是单纯的的求面积,这题在单纯的求面积上小小改动即可求两次覆盖以上的面积两份代码对比下:HDU 1542#define mem(a,x) memset(a,x,sizeo原创 2016-08-23 01:56:33 · 1314 阅读 · 0 评论 -
斜率优化DP和四边形不等式优化DP整理
当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环(一重循环跑状态 i,一重循环跑 i 的所有子状态)这样的时间复杂度是O(N^2)而 斜率优化或者四边形不等死优化后的DP可以将时间复杂度缩减到O(N)O(N^2)可以优化到O(N) ,O(N^3)可以优化到O(N^2),依次类推斜率优化DP和四边形不等式优化DP主要的原原创 2016-08-22 21:35:23 · 3533 阅读 · 0 评论 -
HDU 4553 约会安排(线段树区间合并&优先级)
Problem Description 寒假来了,又到了小明和女神们约会的季节。 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会。与此同时,也有很多基友找他开黑,由于数量实在过于巨大,怎么安排时间便成了小明的一大心事。 我们已知小明一共有T的空闲时间,期间会有很多女神或者基友来找小明。 作为一个操作系统原创 2016-08-22 20:00:00 · 1083 阅读 · 0 评论 -
HDU 3507 Print Article(斜率DP入门理解)
Problem DescriptionZero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it to print articles. But it is too old to work for a long time and it will cert原创 2016-08-18 09:54:03 · 630 阅读 · 0 评论 -
字典树入门小结
一、基础知识:树状结构保存字符串,查找快,判断前缀快。建Trie树:逐一把每则单词的每个字母插入Trie。插入前先看前缀是否存在。如果存在,就共享,否则创建对应的节点和边struct Trie{ int num; Trie *nx[N]; };num记录该前缀出现的次数,N是分支数,比如小写字母构成的单词的树N就是26,二进制的01编码N就是2具体建树代码:Trie原创 2016-08-16 21:10:51 · 997 阅读 · 0 评论 -
POJ 3661 Running(dp)
DescriptionThe cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ≤ N ≤ 10,000) minutes. During each minute, she can choose to either run or rest for the w原创 2016-08-16 20:46:16 · 440 阅读 · 0 评论 -
POJ 1141 Brackets Sequence(区间DP)
DescriptionLet us define a regular brackets sequence in the following way: 1. Empty sequence is a regular sequence. 2. If S is a regular sequence, then (S) and [S] are both regular sequences原创 2016-08-16 11:58:26 · 355 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome (区间DP)
DescriptionKeeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow an electronic ID tag that the system will read as t原创 2016-08-16 09:07:34 · 274 阅读 · 0 评论 -
HDU 2476 String painter (区间DP)
题目:String painter 题意:给出两个字符串A,B(长度相等)现在可以执行的操作是,随便选一个区间,将这个区间的字母全部变成 c (c是指a~z里面的任意一个字母)问要将A串变成B串的最少操作次数分析: 单纯的直接用区间dp不好状态转移,因为将区间[l,r[刷过之后, 改变了A串之后A串和B串的匹配情况不好考虑原创 2016-08-16 00:55:14 · 306 阅读 · 0 评论 -
HDU 4283 You Are the One(区间DP)
题目:You Are the One 题意: n个男孩排成队登台,每个男孩有一个屌丝值Di 若某男孩第k个登台 ,他将产生Di*(k-1)的愤怒值 要求所有男孩愤怒值最小 可以做的操作是将男孩丢进栈里面改变登台顺序(栈满足先进后出 ) 分析: dp[i][j]表示区间[i,j]所有男孩的最小愤怒值 if (i == j) return 0;//第一个登台愤怒值为0 状态转移: 首先明确的是区间[i,j]内共有原创 2016-08-15 19:56:01 · 258 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle(区间DP)
题目:Multiplication Puzzle 题意: n个正整数a1~an,将除a1和an的数依次取出 假设取出的是a[i],则score += a[i-1]*a[i]*a[i+1] 按不同顺序取出各数会得到不同的score, 求最小的score 分析: 状态 : dp[i][j]表示将区间[i,j]内(不含a[i]、a[j])拿走的最小score 边界 : if (i+1 >= j) return 0原创 2016-08-15 18:29:38 · 302 阅读 · 0 评论 -
CodeForces 149D Coloring Brackets(区间DP)
题目链接:Coloring Brackets#define mem(a,x) memset(a,x,sizeof(a))#include#include#include#include#include#include#include#include#include#include#include#include#define Sint(n) scanf("%d",&n原创 2016-08-15 16:14:28 · 389 阅读 · 0 评论 -
POJ 2955 Brackets (区间DP)
题目:Brackets题意:求字符串s的满足完全匹配的最长子串分析:dp[i][j]表示区间[i,j]内的最长匹配状态转移:1.dp[i][j] = dp[i][j-1] //即第 j 个括号不能匹配2.考虑第 j 个括号可以匹配的情况在区间[i,j-1]中找到一个k满足s[k]可以和s[j]匹配dp[i][j] = max(dp[i][j],dp[i][k-1原创 2016-08-15 14:31:24 · 273 阅读 · 0 评论 -
Light oj 1422 Halloween Costumes(区间DP:迭代or记忆化搜索)
题目:1422 - Halloween Costumes题意:有n个party要参加,每次参加必须穿固定的衣服(ci),每次参加可以选择穿衣服或者脱衣服,也就是可以用外面的衣服将里面的衣服覆盖,后面需要就脱掉外面的把需要的衣服露出来,给出n次party要穿的衣服编号,求最少花费多少衣服分析:区间DPdp[i][j]表示从第i个party到第j个party所需的最少服装数if原创 2016-08-15 13:59:44 · 292 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream 据说超时可以打表^_^)
题目:Mondriaan's Dream状态压缩,超时,于是花2分钟打个表 0 表示没有覆盖 1 表示已经覆盖 dp[i][s] 表示第 i 行使用状态 s 的方案数 dp[i][s] = ∑dp[i-1][ss] ss 为 枚举的第 i-1行的情况 注意: 1. ss 中的0表示没有覆盖 ,需要第 i 行在此处放一块 竖着的砖 所以 s 和 ss 不能在相同的位置同时为 0 即当 ss 在某处是 0的话原创 2016-08-15 10:21:07 · 448 阅读 · 0 评论 -
POJ 3311 Hie with the Pie(TSP问题DP解)
题目:Hie with the Pie题意:从0出发,走n个城市,最后回到0点,求最少花费分析:状态压缩:dp[i][j]表示在i状态下,当前遍历第j个点的最小值 初始化:dp[1 状态转移:dp[i][j] = min(dp[s][k] + d[k][j]) 其中s是i的子状态,在状态i的基础上,第j位为0的状态原创 2016-08-15 10:12:58 · 701 阅读 · 0 评论 -
HDU 3586 Information Disturbing(树形DP + 二分)
Problem DescriptionIn the battlefield , an effective way to defeat enemies is to break their communication system.The information department told you that there are n enemy soldiers and their ne原创 2016-08-12 15:07:30 · 579 阅读 · 0 评论 -
HDU 4678 Mine (博弈SG+自由度原理)
Problem DescriptionHave you ever played a game in Windows: Mine?This game is played on a n*m board, just like the Pic(1)On the board, Under some grids there are mines (represent by a red f原创 2016-08-10 14:49:49 · 545 阅读 · 0 评论