2014年6月15日

CF 436D 最小生成树

摘要: 设一个开头的虚节点,然后建稠密图,O(n^2)。使用prim。O(n^2),保存方案,没什么好说的。#include #include #include #include using namespace std;int k,w,n,m;int cnt;int map[1005][1005];char... 阅读全文

posted @ 2014-06-15 00:27 six_god 阅读(220) 评论(0) 推荐(0) 编辑

2014年5月24日

HDU 1847 博弈

摘要: sg[0]=0;sg[i]=mex{sg[i-2^(j)]} (i>=2^j)mex()为不在此集合的最小非负整数#include #include #include #include using namespace std;using namespace std;int main(){ in... 阅读全文

posted @ 2014-05-24 21:24 six_god 阅读(175) 评论(0) 推荐(0) 编辑

2014年5月23日

ZOJ 3666 博弈 SG函数

摘要: SG函数:对于任意状态,定义SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S)表示不再S内的最小非负整数SG(X)=0当且仅当x为必败态。解:构造一个有向无环图(树),SG(x)=mex(SG(y)) y为x的孩子节点。SG(所有叶子节点)=0#include #incl... 阅读全文

posted @ 2014-05-23 21:30 six_god 阅读(284) 评论(0) 推荐(0) 编辑

2014年5月22日

zoj3675 BFS+状态压缩

摘要: #include #include #include using namespace std;int n;int vis[10000000];int mode1,mode2;struct node{ int step,status;};void print(int x){ int tmp... 阅读全文

posted @ 2014-05-22 21:25 six_god 阅读(109) 评论(0) 推荐(0) 编辑

2014年3月14日

HDU 4734 F(x) 数位DP

摘要: 数位DP 越来越顺了。但是无脑了一下,对于每组数据都删除记忆,10000组数据档当然TLE了。题意:求0~b中有多少个数X, 其f(x)#include int g[20][10000];int f(int x){ int sum=0; int y=1; while (x>0) { sum+=y*(x%10); x/=10; y=y*2; } return sum;}int dp(int i,int j){ if (j=0) ans+=dp(i-1,j-k*(10) { ... 阅读全文

posted @ 2014-03-14 17:29 six_god 阅读(243) 评论(0) 推荐(0) 编辑

2014年3月13日

HDU 3709 Balanced Number 数位DP

摘要: 强烈吐槽一下,没搞清楚状态方程以前不要写代码。。。强烈吐槽一下,大学以前实视至珍宝的逐步调试效率果然太低了!,输出中间过程才是王道。题意:输出x,y;求[x,y]中有多少个数是平衡的。4139是平衡的,因为 4*2+3*1=9*1.即支点左右的数乘以力臂(力矩为0)平衡。f[i][j][k]表示长度为i的数(最高位可以为0),支点在第j位,目前已知平衡因子已经达到了k,有多少个平衡树。f[i][j][k]=Σ(f[i-1][j][ k+(i-j)*p] ) (0#include #define ll long longll f[20][20][2000];ll dp(int i,int ... 阅读全文

posted @ 2014-03-13 21:54 six_god 阅读(134) 评论(0) 推荐(0) 编辑

2014年3月6日

HDU 3555 数位DP

摘要: 题意,问1~n 有多少个数含有49.f[i][0]表示小于等于i位的不含有49数有几个。f[i][1]表示小于等于i位的含有49的数有几个。f[i][2]表示小于等于i位的不含有49,但是最高位是9的数有几个。f[i][0]=f[i-1][0]+f[i-1][0]*9-f[i-1][2]; 第一个f[i-1][0]表示小于i位的所有数。f[i-1][0]*9表示i-1位的数,在第i位有9种可能。也可以理解成最高位可以是0,049就是一个两位数。 f[i][1]=f[i-1][1]*10+f[i-1][2]; f[i][2]=f[i-1][0];49,049,0049是不是重复算了... 阅读全文

posted @ 2014-03-06 20:18 six_god 阅读(230) 评论(0) 推荐(0) 编辑

2014年3月4日

HDU 4336 Card Collector

摘要: 题意: 在每包小当家方便面里面,可能有一张卡片,也可能没有。已知有总共有n张卡片,第i张的卡片出现的可能是pi。 问收集齐所有的卡片需要吃方便面数的期望是多少。先来讲一下期望这个东西。E的原始定义是E=p1*x1+p2*x2+... pi表示买xi包面能集齐所有卡片的概率。从实际上说,买n*E包方便面(n非常大),极大可能得到n套卡片。从理论上说,在理想的情况下,买E包方便面,必然得到1套卡片。先把问题简化一下,只有一张卡片,其发生的概率是p,集齐这张卡片需要吃方便面的期望是E.则 E=p*1+(1-p)*(1+E).虽然把这个公式化简成Ep=1比较好理解,但是要写出多张卡片,就必须先理解E. 阅读全文

posted @ 2014-03-04 13:53 six_god 阅读(771) 评论(2) 推荐(1) 编辑

2013年10月11日

HDU4340 Capturing a country DP

摘要: 自己原来写的两个维度的DP有错,看了半天这个大牛的blog。http://blog.csdn.net/cyberzhg/article/details/7840922题意:A军队和B军队要一起占领一个国家,城市和城市之间有一些双向边(但是没有环)。A军队要占领i城市需要a[i]的代价,B军队需要b[i]的代价。 若果A军队占领了i城市,i城市和j城市相邻,则A军队占领j城市只要a[i]/2的代价,B军队同理。问两个军队一起占领所有城市所需要花费的最小代价是多少。解题过程上上述解题报告,再加几点自己的理解f[i][0][0]表示的是以i用A军队进行进攻,且其所有选A军队的孩子选择半价的代价... 阅读全文

posted @ 2013-10-11 02:17 six_god 阅读(176) 评论(0) 推荐(0) 编辑

2013年10月6日

CF 351A - Jeff and Rounding DP

摘要: http://codeforces.com/problemset/problem/351/C题意:有2*n个浮点数a1,a2,a3...a2*n,把他们分成n队,对于每对,对A做floor() 操作,对B 做ceil()操作。生成b1...b2*n,求|(b1+b2+...+b2*n)-(a1+a2+a3...+a2*n)|的最小值。对于每个数ai,对他们做floor()的cost是up()=ai-floor(ai) ,做ceil()的cost是down()=ceil(ai)-ai设f[i][j]表示前i个节点有j个做ceil()操作(i-j个floor())的最优值 f[i][j]=min. 阅读全文

posted @ 2013-10-06 14:10 six_god 阅读(401) 评论(0) 推荐(0) 编辑

导航