2011年11月9日
摘要: SPOJ_9939 这个题目可以用2-SAT做。 首先既然是2-SAT的问题的话,我们就要去找核心变量,然而B的每局的选择却是3个,石头(1)、剪子(2)、布(3),难道3-SAT?开玩笑,目前至少我没见过3-SAT的题目。仔细想一下,其实选择也就两个,因为A的选择是定的,而我们必须让A赢,因此B的选择实际上只有两个。 找到核心变量之后就是构图了,由于构图要稍复杂一些,就不直接用字母代替了,还是用一个实例来说明一下吧。 我们不妨一共3局,A出的分别是1、2、3,那么我们可以得到B的选择如下。 B1 1 2 1 B2 2 3 3 !B 3 1 2 其中B1、B2为B的两个选择,!... 阅读全文
posted @ 2011-11-09 20:14 Staginner 阅读(302) 评论(0) 推荐(0) 编辑
摘要: UVA_620 话说真的不知道为什么这道题目会放在动规的分类里,只要递归判断就可以了。如果存在多个状态的话,要输出细胞成长最后一个的状态。#include<stdio.h>#include<string.h>#define MAXD 100010int N, max;char b[MAXD];void dfs(int s, int t, int flag){ if(s == t) { if(b[s] == 'A') { if(flag) max = 1, flag = 0; } ... 阅读全文
posted @ 2011-11-09 01:36 Staginner 阅读(343) 评论(2) 推荐(0) 编辑
摘要: UVA_10404 我们可以用一个数组f[i]表示当还有i个石子该Stan取的时候,Stan是否能够获胜。这时,对m种取法都要考虑一遍,如果存在一种取法r[j]使得i>=r[j]并且f[i-r[j]]=0时,就说明如果Stan按这种取法走就会必胜,因此f[i]就标记为1即可。 最后只要看f[N]是否为1即可。#include<stdio.h>#include<string.h>#define MAXD 1000010#define MAXM 15int N, M, f[MAXD], r[MAXM];void init(){ int i; scanf("% 阅读全文
posted @ 2011-11-09 01:11 Staginner 阅读(371) 评论(4) 推荐(0) 编辑