上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 16 下一页
摘要: 一看到ACGT就会想起AC自动机上的dp,这种奇怪的联想可能是源于某道叫DNA什么的题的。题意,给你很多个长度不大于10的小串,小串最多有50个,然后有一个长度#include#include#include#include#include#include#define maxn 1500using namespace std;char str[50][15];char T[50];int n;void convert(char *s){ int len = strlen(s); for (int i = 0; i go[c[i] - 'a'] != 0) p = p-> 阅读全文
posted @ 2014-04-09 20:43 chanme 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意:给你N个的任务一定要在每天的[Li,Ri]时段完成,然后你只有K天的时间,每个任务有个val,然后求K天里能够获得的最大bonus。思路:拿到手第一直觉是最小费用最大流,然后不会建图,就跑去想dp去了。好吧最小费用最大流的做法是这样的。首先题目给的是时间,所以变成整数的区间再离散化是一个标准姿势啦。然后对于相邻的时间点 1,2,3,4顺次建立这样的边 1->2->3->4...,边的容量为inf,费用为0.然后对于源点s,我们向时间点1连一条容量为k,费用为0的边,目的是限流。最后由最后一个时间点向汇点t连一条容量为inf,费用为0的边。然后对于每个事件,li,ri,v 阅读全文
posted @ 2014-04-07 21:45 chanme 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题意:给你2^n个数,每次操作将其分成2^k份,对于每一份内部的数进行翻转,每次操作完后输出操作后的2^n个数的逆序数。解法:2^n个数,可以联想到建立一棵二叉树的东西,比如 2,1,4,3就可以建成下面这样 [2,1,4,3] level 2 / \ [2,1] [4,3] level 1 / \ / \ ... 阅读全文
posted @ 2014-04-07 19:14 chanme 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n个模块,每个模块在A核花费为ai,在B核跑花费为bi,然后由m个任务(ai,bi,wi),表示如果ai,bi不在同一个核上跑,额外的花费为wi,求最小的花费。一开始想的时候以为是费用流,但想着想着觉得,这么大的数据量绝对不可能是费用流。最后发现它是一个最小割模型。实际上就是要将网络里的模块划分成s-t两个点集,然后我们合适的构造一下边就可以使得对应的最小割就是我们的答案,构造的方法是这样的:当模块属于A集的时候,花费为ai,所以就从向t连一条ai的边,而当模块属于B集的时候,花费为bi,所以就由s连一条向bi的边。然后对于每个任务,当ai,bi不同的时候花费为mi,所以就由ai,b 阅读全文
posted @ 2014-04-07 18:57 chanme 阅读(1438) 评论(0) 推荐(0) 编辑
摘要: 题目给你一棵苹果树,然后每个结点上有一定的苹果树,你要将苹果运输达到某个状态,使得均方差最小。 将苹果x个从a->b的花费是x*w,w是边权。当时比赛的时候想的就是,最后达到的状态一定是sum/n,但是除不尽的时候可能有些会多出1,譬如7个苹果,3个结点,最后的平衡一定是2,2,3。 问题就是我们需要考虑的是哪些结点是3和2,我就在这里卡住了。赛后看了一些题解,其实可以把这个看成是树dp,dp[v][n]表示结点v下有n个多出来是1的结点,然后做一个树dp,我之所以没有这么想是考虑复杂了,我是直接算从(u,v)的路径长度乘以x,但实际上没必要,因为传输的时候必然是经过父边来传输的。树dp 阅读全文
posted @ 2014-04-06 21:57 chanme 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个圆形和很多个矩形,然后要你求圆形的圆周有多少被矩形覆盖。思路:比赛的时候是有思路的了,不过一直在调别的题,最后剩下30分钟肯定来不及敲。想法是这样的,要是我们可以求出每个矩形覆盖了圆周的哪些区间,我们最后就对这些区间排序然后求区间和就好了,但是问题是怎么知道哪些区间是要的,哪些区间是不要的呢? 首先我们对矩形的四条线段和矩形求交,把所有的交点求出来,然后将交点用atan2转化成极角(我用的区间是[0,2pi]),实际上直接用极角肯定也没问题吧),然后排序,排序之后我们会发现我们要的区间一定是相邻的两个角度的点对应的区间,但是有可能这些区间是不是我们要的,判断的条件就是两个角度的对 阅读全文
posted @ 2014-04-03 20:24 chanme 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题意:一个人物有K(K#include#include#include#include#include#include#define ll long long#define maxn 120#define maxk 10using namespace std;int K, N;int b[maxk], c[maxk], d[maxk];int G[maxn][maxk];int a[maxn];int X, Y;int dp[2][maxn][1 = K) return 0; int cur = 0; if ((sta >> step) & 1) cur++; int re 阅读全文
posted @ 2014-04-01 00:18 chanme 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 给你n个工件,然后有A,B,C三个工厂,然后它们加工第i个工件所需要的时间分别为a[i],b[i],c[i],然后现在要你利用三间工厂加工所有的零件,要求是任何时间工厂都不能停工,而且一定要三间同时做完。理论上是很难突破时间限制的,但是发现sum(a[i]),sum(b[i]),sum(c[i])#include#include#include#include#include#include#define ll long long#define maxn 220#define eps 1e-7using namespace std;int dp[130][130][130];bool vis[ 阅读全文
posted @ 2014-03-31 20:31 chanme 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理。先来说说题意吧:总共有n个人,n个人都会有一段话,先是princess说话,里面如果提到了a1,a2,a3...这几个不同的人的话,对应提到的次数是x1,x2,x3..的话,那么下一个对话是ai这个人说的概率是xi/(x1+x2+x3)....,然后下一个人的对话里也会提到别的人,然后也有一定的概率会有下一轮对话,现在要问的就是,给定了这些对话,问你期望的对话次数是多少。我们可以设第i个人持续的对话的期望是xi,那么xi应该等于 xi=p1*x1 阅读全文
posted @ 2014-03-31 19:48 chanme 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 一个很玄乎的问题,但听到2-SAT之后就豁然开朗了。题目的意思是这样的,给你n个点群,每个点群里面有两个点,你要在每个点群里面选一个点,以这些点做半径为r的圆,然后r会有一个最大值,问的就是怎么选这些点使得r最大。2-SAT就是对于每个变量有一些制约的关系 a->b 表示选了a就就要选b。然后我们二分这个半径,对于两点间距离#include#include#include#include#include#define ll long long#define maxn 220#define eps 1e-8using namespace std;struct Point{ double x 阅读全文
posted @ 2014-03-30 23:43 chanme 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 16 下一页