上一页 1 2 3 4 5 6 7 8 ··· 18 下一页
摘要: 终于把这题搞出来了。。。前后看了半一星期。比赛堆积的题目在减少。。。加油! 数位dp,f[i][sum][mod][res]表示前i位,和为sum,模为mod,sum%mod结果为res的状态个数。f[i+1][sum+k][mod][(res*10 + k)%mod] += f[i][sum][mod][res];予处理出所有的f[i][sum][mod][res], 然后从高到低逐位统计。比如当前位为a_i,则枚举当前位为0...(a_i-1) 这些数,i位往后的数的所有状态已经预处理出来了。。。所以出现 %mod == 0的情况直接累加就可以。。。最后单独处理一下最低位。。。 1... 阅读全文
posted @ 2012-08-28 10:39 AC_Von 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 题目意思是给一个原点坐标,然后再给n个点坐标,每个点有一块砖头,要求把这n个砖头搬到原点。每次最多搬两块,并且走一条路用的时间为坐标距离的平方。求最短时间。n<=20而且要输出方案,多种方案的话按最小字典序输出。。。解:如果不需要输出方案的话,那这题就很容易 了。。。f[i]表示到达i状态的最小时间。一个没有搬的砖头j,f[i|(1<<j)] = min{f[i] + 2*dis(a[j], O)};再枚举一个没有到达的状态k,f[i|(1<<j)|(1<<k)] = min{f[i] + dis(a[j], O) + dis(a[j], a[k]) 阅读全文
posted @ 2012-08-27 20:08 AC_Von 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 这几天浑浑噩噩。。。昨天还被xianbin5拉着做zoj月赛 http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=340。这切的体会到一个弱b的无奈...实力问题,不能怪状态。。。-_-! A 开始看以为是水题。。。然后以为推推dp就过了。。。结果。。。推了一小时,什么都没推出来。。!后来才知道f[i]记录一下从i往右最靠右的数对的左端点。fuck! C 过题人数最多的题。。。当时根本没看。今天上午做了做。。。。然后浑浑噩噩。。。。然后弱b的连数状数组都不敢写了。。。数状数组+二分。。。 I 纯模拟+并... 阅读全文
posted @ 2012-08-27 17:04 AC_Von 阅读(310) 评论(2) 推荐(0) 编辑
摘要: 题目:a1*a2*...*an=b1*b2*…*bn,(ai > 1) 给出b序列,求a序列有多少种。先不考虑ai > 1这个条件。可以通过费解b_i的质因子得到如下公式:∏b_i =∏(p_i^k_i);pi是∏bi 的某个质因子。因为a_i 共有n个,所以把每个p_i填到这n个空位置里边去。对于p_i,有C(k_i + n - 1, n - 1);证明见:http://hi.baidu.com/pp_5/blog/item/73798043ec77781f72f05d51.html/cmtid/6aff22f08c5c85a1a50f523d显然,所有的p[]的值为∏C(k_i 阅读全文
posted @ 2012-08-24 16:29 AC_Von 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 当最短路变成二维,就会发生非常有意思的事情。。。问题:给出u v w,表示从u -> v(双向边)所耗的时间为w,又知道没经过一条边,获利为1(对于一天边可以来回走)。求从start到end点,获利至少为k时用的最小时间。。。如果没有那个k,这个问题直接就是st -> ed的最短路。spfa,dijkstra。。。等等现在可以设 dis[i][j]表示到从st到 i点经过边数为j 时的最短路。然后直接spfa,队列中的每个点保留两个值,节点号,和到这个节点的边数。const int N = 100010;const int M = 5024;struct node { int to 阅读全文
posted @ 2012-08-24 09:13 AC_Von 阅读(345) 评论(1) 推荐(0) 编辑
摘要: 写个类,以后到这里找就行。^_^const int M = 5024;struct node { int to; int val; int next;} g[N<<1];class Graph {public: int head[M], t; void init() { CL(head, 0XFF); t = 0; } void add(int u, int v, int w) { g[t].to = v; g[t].val = w; g[t].next = head[u]; head[u] = t++; ... 阅读全文
posted @ 2012-08-24 09:02 AC_Von 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 最近两次比赛出现两道相同类型的题,有人十几分钟就AC了,而有人卡了俩小时。。。反思。。先说hdu4353这道题,题意是要求一个从N个点1里边画出一个多边形来,然后给出M个点2。让这个(多边形的面积/多边形内点2的个数)最小。描述很复杂。。。但是仔细想想会发现,多边形的点越多,面积也就越大,所以,这里只能画三个点,也就是一个三角形。至于怎么求点2的个数,这是很有必要总结的,祭奠我那苦逼的俩小时吧。。。。先看一个图:这不是立体图,仅仅是个平面图。。。假设sum[i][j]表示i,j这条线上方这块区域的点的数目可以看到三角形内点2的数目 = sum[i][j] + sum[j][k] - sum[i 阅读全文
posted @ 2012-08-22 15:12 AC_Von 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 不错的题,做了两次。两次感觉不一样,第一次那叫一个费劲啊。。。看了一天的解题报告,才大概理解怎么回事,这次做完好好写写总结吧。开始想到的状态有sum[i]表示以i为根的子树走遍所有的字节点的值,leaves[i]表示以i为跟的子树的叶子节点数。显然是错误的。。。好多状态表示不出来。后来有考虑分回到i节点和不回到i节点这两种状态。但还是设计不出来,最不能确定的就是一个顺序问题。无奈翻了一下以前看的资料。发现一个没有想到的贪心方法。。。。success[u]表示u为根的子树上,成功找到房子的步数和fail[u]表示u为根的子树上,找不到房子的步数和leaves[u]表示u为根的子树上,叶子节点.. 阅读全文
posted @ 2012-08-20 16:07 AC_Von 阅读(766) 评论(0) 推荐(0) 编辑
摘要: 250pt水题500pt分两种情况, 1、RGB中最小值足够大,制约因素是R+G+B的值,这种情况下结果为(R+G+B)/tot 2、R+G+B足够大,制约因素是RGB中最小值不够大,这种情况下结果为m/c 两者取最小值第一种情况,R=7,G=6,B=6,最小值6足够画两个三角形,但是R+G+B=19不够画两个三角形第二种情况R=1000000000,G=6,B=6,R+G+B足够画N多三角形,但是G、B只有6个,最多画两个三角形/*就他妹的6行代码!!!*/class FoxPaintingBalls {public: long long theMax(long long R, lon... 阅读全文
posted @ 2012-08-18 10:10 AC_Von 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 我发现最近写blog都是一补好几天的。。。1001, 0/1规划,关键在构图。。。。map[i][i]这种点不用考虑,其他点连成邻接表就可以,然后从1到n求最短路。另外,“存在从1到1有一个环,从n到n有一个环”。所以要分别1->n, n->n跑一遍,1->n求出的dis[n]跟1->1有环,n->n有环这种情况比较一下,取小值。1002 偶不知道怎么证明,不过,如果比赛的时候瞎猜这个题,应该可以过的。。。T_T1005 思路跟上一场的03一样。不过我写的退化了。。。1008 我。。。可以说脏话吗?找规律吧。。。给一个1-20的表11 21 3 22 1 4 31 阅读全文
posted @ 2012-08-18 10:06 AC_Von 阅读(167) 评论(0) 推荐(0) 编辑
摘要: /*建图用的邻接表,复杂度O(E*logE)*/struct pnode { int num; int len; pnode() {} pnode(int a, int b) : num(a), len(b) {} bool operator < (const pnode tmp) const { return len > tmp.len; }};int dis[N];bool vis[N];int n;void bfs(int s) { priority_queue<pnode> q; q.push(pnode(s, 0)); ... 阅读全文
posted @ 2012-08-17 19:26 AC_Von 阅读(808) 评论(0) 推荐(0) 编辑
摘要: 01 蛋疼的题,我那种写法死活不过。。。不知到哪里出问题了。优先队列直接写就行,注意是双向边,另外可能有自环。我想吐嘈HDU蛋疼的__int6403一道dp题,不过要优化,用单调队列。可以看出若每个状态只由上一层位置在其左边的状态的转移而来的话: dp[i][j] =min { dp[i-1][k] + pos[i][j] - pos[i-1][k] } + cost[i][j]= min { dp[i-1][k] - pos[i-1][k] } + pos[i][j] + cost[i][j]dp[i-1][k]-pos[i-1][k]是个确定的值,就是相当于求位置在pos[i][j]左边的 阅读全文
posted @ 2012-08-16 09:16 AC_Von 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 那道题目看着好多状态。。。leader, speed, energy, distance,还有结果minute。可以看到:1、某头牛变成leader以后的energy是 总能量 - distance。 2、当leader > N || energy < 0这些情况都是非法的。3、distance == D这种情况是终止状态。设 f[ld][sp][e][dis] 表示当前leader是ld,以速度sp到达能量剩余为e,行走距离为dis的状态所用的最少时间。 然后记忆化搜索可破#include <iostream>#include <cstdio>#inclu 阅读全文
posted @ 2012-08-13 15:29 AC_Von 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 错过了。。。当练习做的。250pt 略500pt怎么开始就没敢写暴力呢。。。。看别人的思路,挺巧妙的。Orzclass ColorfulChocolates {public: int maximumSpread(string c, int m) { int l = c.length(), i, j, num, cnt; int s[3000]; int sum, ans = 0, res; REP(i, l) { num = 0; cnt = 0; for(j = i - ... 阅读全文
posted @ 2012-08-12 16:30 AC_Von 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题意:N个点的一颗树。问最少添加多少条边可以让每个点都在一个(且仅一个)环中。不得不佩服,这题dp设计出来的人。。。偶是弱菜,只能膜拜了。这位大牛的解说,很详细:http://hi.baidu.com/19930705cxjff/blog/item/1df66e4a4ff3022e08f7ef5d.html 首先明确一点,题中的环至少需要3个顶点。因此,对于树中的每个顶点,有3种状态。f[x][0]表示以x为根的树,变成每个顶点恰好在一个环中的图,需要连的最少边数。f[x][1]表示以x为根的树,除了根x以外,其余顶点变成每个顶点恰好在一个环中的图,需要连的最少边数。f[x][2]表示以x为根 阅读全文
posted @ 2012-08-12 16:23 AC_Von 阅读(973) 评论(0) 推荐(0) 编辑
摘要: uestc的题。。。果然,题意都弄得这么晦涩。01推个规律,mod r。偶推错了。。。1个小时才过。06三分做的。还是不知道怎么证明他是凹函数,话说。。以为神人想当然的说这是凹函数。。。怎么证明?管他呢,真没劲!08话说偶已经推出来s1的和sum1,s2的和sum2。sum1 - sum2必为偶数,才能YES。。。但是对于字符串长度为2时这个规律无效。。。。所以。。。偶没敢写这题太神了。。。怀疑是tc上的题改的。。09树形dp。两种方法一个共有的性质。左孩子中的最大值小于右孩子中的最大值。(因为序列为 2^0, 2^1, 2^2...,2^n)方法1:f[n][d]表示n个节点深度为 1--- 阅读全文
posted @ 2012-08-10 17:14 AC_Von 阅读(215) 评论(0) 推荐(0) 编辑
摘要: For non-negative integersmandnand a primep, the followingcongruence relationholds:whereandare the basepexpansions ofmandnrespectively. 阅读全文
posted @ 2012-08-08 22:09 AC_Von 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 01树形dp。。。比赛完看了看解题报告。发现我的状态写的太搓了,想到了先只考虑半数的,然后在一个全是A(或B)的块里面补上一个全的。当时没想着把这个也加到状态里去,写特判写的想哭。。。!f[t][f][0] 表示t为根的子树,t被f攻击,并且算是f攻击的“连通块“里没有一个节点的攻击值是全值的最小值。f[t][f][1] 表示t为根的子树,t被f攻击,并且算是f攻击的“连通块“里有一个节点的攻击值是全值的最小值。sum = Σ{min(f[t->i][f][0], f[t->i][f^1][1])};plus = min{ f[t->i][f][1] - min(f[t-&g 阅读全文
posted @ 2012-08-08 22:04 AC_Von 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 详见:《算法导论》HDU 43441、长度是N的因子(且大于1小于N),集合中的元素得两两互质2、为了尽可能多的选出,每个L的质因子应当只包含N的一个质因子,L是一个质因子的整数次,所以K的值就是N中不同质因子的个数3、要想和最大,那么使得每个L最大,只要使得质因子的指数最大即可所以用pollard_rho分解N的质因数,然后统计不同的质因子个数K,以及计算所有相同质因子乘积的和S特殊情况:如果N本身是某个质数的整数i次幂,那么K只能等于1,因为L要小于N,所以L最大为该质数的i-1次幂 以前poj上用过这个模板。。。放在这道题上wa到爆了。。。最后发现是没注意上面这种情况。。。吐嘈一下,恶心 阅读全文
posted @ 2012-08-08 21:26 AC_Von 阅读(1308) 评论(0) 推荐(0) 编辑
摘要: 小人从上往下掉的时候,比如区间[-50, 100], [0, 100]它可以从上一个100跳到下一个100.。。。。无语的神逻辑。。。从早晨wa到现在。T_T按高度从大到小排序f[i][0]表示到i层左端点的最小路径,f[i][1]表示到i层右端点的最小路径。落下时判断第j层到第i层有没有其他的层。。。这个写了一个暴力,居然没有TLE。。。看来题目数据真的不怎么强。View Code #include <iostream>#include <cstdio>#include <cmath>#include <vector>#include < 阅读全文
posted @ 2012-08-07 10:22 AC_Von 阅读(1059) 评论(0) 推荐(0) 编辑
摘要: 题面POJ 1170:有诸多商品,没有商品有一个单价。可以组合的买特定个数的特定商品,这样会得到优惠。给出这些优惠策略,给出每种商品的个数,问最少能花多少钱能把这些商品带走?解:输入好蛋疼,先个商品类型数,然后给每个商品的编号c,个数k,和单价p。再给出s个优惠策略,每种策略前边有一个num,表示需要多少类型的商品组合,然后是num对商品,每对给出商品的编号和数目,最后是固定类型固定数目的商品组合起来需要的花费。题目说的很清楚,最多5种商品,s最多为99, num最多为5。所以完全可以直接写背包。。。不过这个背包是5维的,写的好蛋疼。。。dp[i][j][k][l][m]表示背包被i件0号商品 阅读全文
posted @ 2012-08-06 11:36 AC_Von 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 这个题好纠结。。。比赛没思路,回头又看得出题报告。最后写出来的数状数组跑了1.5s。。。数状数组的思想还算好理解,就是对角线的控制上。。纠结了。一个直观的想法是首先用N^2的时间预处理出每一个是1的点向上下左右四个方向能够延伸的1的最大长度,记为四个数组l, r, u, d。然后我们观察到正方形有一个特征是同一对角线上的两个顶点在原方阵的同一条对角线上。于是我们可以想到枚举原来方阵的每条对角线,然后我们对于每条对角线枚举对角线上所有是1的点i,那么我们可以发现可能和i构成正方形的点应该在该对角线的 [i, i + min(r[i], d[i]) – 1] 闭区间内, 而在这个区间内的点 j 只 阅读全文
posted @ 2012-08-05 21:39 AC_Von 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 比赛的时候各种wa加TLE。。。好纠结。。。01...至今没搞懂怎么个过程。。。04 gb用hash过得,后来看了一下标程,复杂度O(n^3),尼嘛,我写个O(n^3*20)的算法就超时。。。!06 偶始终不明白容斥原理怎么用的。。。估计各位大神是猜的公式,把1/p1 + 1/p2 + ... + 1/pn这个式子写出来后边的就可以猜了。。。07....很无语的一道题。直接暴力dfs能跑两位数。。。09 set过得,各种log的数量级。赛后以为大神总结说,这场比赛,log的数量级已经成为历史了。胡浩说比赛的时间比标程跑的时间多开了3-5倍,怪不得我写多乘个20就超了。。Orz这次出题的! 阅读全文
posted @ 2012-08-04 15:39 AC_Von 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 给一个棋盘,里边有许多黑白格子,要求找出一块连续的矩形,似的矩形内部的格子全部为白色,并且面积(周长)最大。王知昆的《浅谈用极大化思想解决最大子矩形问题》里边有讲解。这里给出模板void solve(int x) { //x表示要求矩形的颜色0为黑色,1为白色 int i, j; for(i = 1; i <= m; ++i) { H[i] = 0; L[i] = 1; R[i] = m; } int lm, rm; for(i = 1; i <= n; ++i) { lm = 1, rm = m; for(j ... 阅读全文
posted @ 2012-08-02 10:55 AC_Von 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 我发现已经无力吐嘈这几次的比赛了。。。这次蹭数据的少了许多,不过出题报告讲的那叫一个玄而又玄,完全没理解他要表达什么http://page.renren.com/601081183/note/863771603?ref=minifeed&sfet=2012&fin=1&ff_id=601081183&feed=page_blog&tagid=863771603&statID=page_601081183_2&level=11001数论题,当时根本就没想到,也不知道怎么证明。。。题解说A的所有质因子包含在B里边,原因是每一个某进制数都可以写 阅读全文
posted @ 2012-08-02 10:45 AC_Von 阅读(445) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 18 下一页