摘要: /* 因为m为连续放的个数 所以状态要包括这个条件 定义状态:f[n][m]表示第n个坑连续放了m个 转移:分两种 1. 第x个坑 放 即m>=1 则 f[x][k]=f[x-1][k-1] 2. 第x个坑 不放 即m==0 则 f[x][k]=Σf[x-1][i] 最后sum一下 f[n][i] */ #include #include using namespace std; long ... 阅读全文
posted @ 2016-04-23 16:09 一入OI深似海 阅读(258) 评论(0) 推荐(0) 编辑
摘要: /* 先来个灌水法 然后建图跑最小生成树 注意观察题目中的规则 a[1][i]!=a[1][j]&&abs(a[2][i]-a[2][j]) #include #include #include using namespace std; int n,m,tot,g[1001][1001],a[3][1001],minn[10001],f[10001],sum,bb; char s[101][10... 阅读全文
posted @ 2016-04-23 11:14 一入OI深似海 阅读(365) 评论(0) 推荐(0) 编辑
摘要: /* 最少步数问题 妥妥的Bfs 很显然队列里存的是串(可能存个数也可以 就像8数码那样) 然后每次队首元素弄出来 能换的都换一遍 最后每次换完的新串入队前先判断到头了没 最后说一句 String大法好0.0 */ #include #include #include #include using namespace std; int ans,n=1,head,tail,t[2000050];... 阅读全文
posted @ 2016-04-23 11:00 一入OI深似海 阅读(240) 评论(0) 推荐(0) 编辑
摘要: /* 数据范围太小 暴力暴力 Dfs直接 终止条件嘛 就是4中目标棋局 挨着枚举一遍就好了 搜索的起点一定是空格 当然 空格周围有黑有白 黑先走或者白先走答案可能不一样 所以 维护一个b 表示这一步走那种颜色 b=1先走白棋 b=2先走黑棋 */ #include #include #include using namespace std; int xx[5]={0,0,0,1,-1}... 阅读全文
posted @ 2016-04-23 10:50 一入OI深似海 阅读(244) 评论(0) 推荐(0) 编辑
摘要: /* 首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了) 最少步数 想到Bfs 维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水 然后倒水:因为没有刻度 所以有两种情况:要么出水的为空 要么接水的满了 然后每次取队首时判断有没有某一个杯子装的水恰好为答案 注意判重时可以弄一个f [a][b] 表示第一个杯子有a升水 第二个杯子有b升水的状态存在了没... 阅读全文
posted @ 2016-04-23 10:42 一入OI深似海 阅读(555) 评论(1) 推荐(1) 编辑
摘要: /* 看到n的范围就觉得这个不可能是DP啥的 因为这个接龙的规则十分的简单 只要前缀相同即可 所以先按字典序排一遍 这样保证符合规则的一定挨着 然后弄一个stack 每次拿栈顶元素看看待入栈的元素是否符合条件 如果符合 就入栈 否则的话弹出栈顶元素 接着比较 这样在过程中不断更新最大的ans */ #include #include #include #include #include ... 阅读全文
posted @ 2016-04-23 09:51 一入OI深似海 阅读(261) 评论(0) 推荐(0) 编辑
摘要: /* 乍一看就是个最短路 SFPA 但是要保证路径上的所有点的出边所指向的点都直接或间接与终点连通。 这一点就蛋疼了0.0 开始想的是正着跑一边 每一个点的所有边都能符合条件 那这个点就符合条件0.0 可惜WA +RE 了 后来xyd大神说 可以先到这从终点跑一边 能到的标记 然后在枚举每个点的所有边指向的点 全被标记那么这个点就ok 最后SPFA 注意 正反建边 数组要大!!!!!!... 阅读全文
posted @ 2016-04-21 21:31 一入OI深似海 阅读(220) 评论(0) 推荐(0) 编辑
摘要: /* 双向DP 两条路 f[i][j] 表示第一条路末位置为i 第二条路末位置为j 的最优解 转移:对于下一个点 k=max(i,j)+1 可以更新 路1的末位置 也可以更新路2的末位置 f[i][k]=min(f[i][k],f[i][j]+dis[j][k])路2 f[k][j]=min(f[k][j],f[i][j]+dis[i][k])路1 最后 点n 可能属于路1 也可能属于路2... 阅读全文
posted @ 2016-04-20 15:32 一入OI深似海 阅读(191) 评论(0) 推荐(0) 编辑
摘要: /* 假设当前有a个A b个B c个C 用 f[a][b][c]来表示 那么如果这个串以A结尾 那就是 f[a-1][b][c]转移来的 所以构成 f[a][b][c]的串一定有一部分是 f[a-1][b][c] 同理 B C 所以: f[a][b][c] = f[a-1][b][c]+f[a][b-1][c]+f[a][b][c-1] 至于题目里那个什么前缀什么规则 既然f[1][1][... 阅读全文
posted @ 2016-04-20 15:31 一入OI深似海 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 不想吐槽题目..../* K bulabula 算法(好像用哪个T bulabula更简单 然而我并不会 - -) 丑陋的处理cnt: Printf时 cnt中 ans[i][0]==1 的删掉 然后更丑陋的处理强连通分量的出度 : 先把所包含的所有点f 成1 然后以每个点为起点跑一边 看看是不是出度指向本连通分量内的点 */ #include #include #include #incl... 阅读全文
posted @ 2016-04-19 15:29 一入OI深似海 阅读(195) 评论(0) 推荐(0) 编辑