[置顶] HDU4642

摘要: 1 #include 2 #include 3 int main() 4 { 5 int i,j,n,m; 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 {10 scanf("%d%d",&n,&m);11 n=n*m;12 j=0;13 for(i=1;i<=n;i++)14 {15 scanf("%d",&m);16 if(m && i==n) j=1;17 ... 阅读全文

posted @ 2013-08-01 22:02 ok_boy 阅读(257) 评论(0) 推荐(0) 编辑

[置顶] HDU4632

摘要: 1 /* 2 区间dp 3 dp[i][j]表示这个区间组成的子串是回文串的个数*/ 4 #include 5 #include 6 const int maxn=1010; 7 int mod=10007; 8 int dp[maxn][maxn]; 9 void init(int len)10 {11 memset(dp, 0, sizeof(dp));12 for(int i = 0; i < len; ++i)13 {14 dp[i][i] = 1;//处理一个字符的情况15 }16 }17 int main()18 {19 i... 阅读全文

posted @ 2013-08-01 21:41 ok_boy 阅读(286) 评论(0) 推荐(0) 编辑

2013年8月29日

zoj3696Alien's Organ (二项分布,泊松分布求近似值)

摘要: 1 /*二项分布即重复n次的伯努利试验,每次发生的概率一样,假设成功的概率是p,那么失败的概率就是1-p; 2 二项分布的概率公式:试验中发生K次的概率是 3 P(ξ=K)= C(n,k) * p^k * (1-p)^(n-k), 其中C(n, k) = n!/(k! * (n-k)!) 4 因为这里的数据,k最大为100,100的阶乘超过了int64位,所以不能用这个公式,这时候可以用泊松分布的概率 5 公式求近似值。 6 好了接着解释题意:这道题输入n和m,求m是期望,求实验中发生不超过n次的概率,所有所有的概率为0,1,2,3,4...n的概率和 7 */ 8 #include 9 #. 阅读全文

posted @ 2013-08-29 10:05 ok_boy 阅读(492) 评论(0) 推荐(0) 编辑

2013年8月26日

BNUOJ 26474 Bread Sorting

摘要: 1 /*给出n个原始顺序的数,再给出要排成目标状态顺序,每次从第一个数列中选择三个,把这三个数中最右边的数放在最左边,然后其他两个数右 2 移一个单位,为你从原始状态能不能排序成目标状态。 3 本人YY的结论,从特殊到一般,虽然一般的只是手证了数值比较小的:结论应该就是1到n的n个数的全排列,分成相等的奇排序和偶排序,且个数一样,同个集合中的排列可以互相转换 4 比如1 2 3 4的全排1 2 3 4 5 1 4 2 3 6 1 3 4 2 7 4 1 3 2 8 4 2 1 3 9 4 3 2 110 2 4 3 111 2 1 4 312 2 3 1 413 3 4 1 2(可由4 1 . 阅读全文

posted @ 2013-08-26 00:54 ok_boy 阅读(295) 评论(0) 推荐(0) 编辑

2013年8月22日

HDU4112

摘要: 1 对于n*m*k的方块,用手掰成1*1*1的那么搜需要的步骤是固定的,为n*m*k-1,如果用刀切,因为可以把多块叠在一起切,所以对于长度为n的,将他切成0,所需要的步骤数位k 2 3 对于n*m*k的方块,用手掰成1*1*1的那么搜需要的步骤是固定的,为n*m*k-1,如果用刀切,因为可以把多块叠在一起切,所以对于长度为n的,将他切成0,所需要的步骤数位k[cpp] view plaincopyprint? 4 满足n/2^k=1即n=2^k,等式两边取对数,logn=k*log2,所以k等于logn/log2 5 6 #include 7 #include 8 ... 阅读全文

posted @ 2013-08-22 21:50 ok_boy 阅读(249) 评论(0) 推荐(0) 编辑

2013年8月20日

HDU1059 二进制拆分优化多重背包

摘要: 1 /*问你能不能将给出的资源平分成两半,那么我们就以一半为背包,运行多重背包模版 2 但是注意了,由于个数过大,直接运行会超时,所以要用二进制拆分每种的个数*/ 3 #include 4 #include 5 #include 6 using namespace std; 7 int w[120005],vr[120005],dp[120005]; 8 int a[7],v[7]; 9 int numw;10 void cf(int n,int ok)11 {12 int i,j,sum,e;13 e=sum=1;14 while(sum0)22 {23 ... 阅读全文

posted @ 2013-08-20 16:00 ok_boy 阅读(354) 评论(0) 推荐(0) 编辑

HDU1087

摘要: 1 /*记忆化dfs+dp,因为每次最多走k步,所以上下左右的方向有所扩展, 2 dp[i][j]存的是从dp[i][j]出发能吃的最大个数*/ 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn=110; 8 int map[maxn][maxn],vis[maxn][maxn]; 9 int dp[maxn][maxn];//dp[i][j]表示从i,j出的最大蛋糕数目10 int n,m,k;11 void init()12 {13 memset(dp,0,sizeof(dp));14... 阅读全文

posted @ 2013-08-20 00:00 ok_boy 阅读(338) 评论(0) 推荐(0) 编辑

2013年8月19日

HDU1978How Many Ways 记忆化dfs+dp

摘要: 1 /*记忆化dfs+dp 2 dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 3 所有路的总数 4 */ 5 6 #include 7 #include 8 #include 9 using namespace std;10 const int maxn=110;11 int map[maxn][maxn],vis[maxn][maxn];12 int dp[maxn][maxn];13 int n,m;14 int ok(int x,int y)15 {16 if(x>=1 && x=1 & 阅读全文

posted @ 2013-08-19 23:59 ok_boy 阅读(219) 评论(0) 推荐(0) 编辑

HDU1160FatMouse's Speed

摘要: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn=1010; 8 struct point 9 { 10 int w,s,per,id; 11 }p[maxn]; 12 int cmp(point a,point b) 13 { 14 return a.s>b.s; 15 } 16 int dp[maxn]; 17 int main() 18 { 19 int i,j,k,n,m; 20 n=1; 21 ... 阅读全文

posted @ 2013-08-19 01:54 ok_boy 阅读(265) 评论(0) 推荐(0) 编辑

2013年8月18日

HDU1503Advanced Fruits

摘要: 1 /*给出两串,求一个最小的字符串包含这两个子串,子串在这个字符串中的顺序不变, 2 做法:定义两个数组,分别标记公共部分在第一个串和第二个串中的位置,在输出是判断一下,输出一个串两个公共部分之间的部分,不包含 3 公共部分,在输出第二个串公共部分之间的串,和最后一个公共部分,然后剩下的在公共部分后面的直接输出就可以了,注意这道题不能直接求出 4 最长公共,然后在最短的那个串中删除这个最长公共,剩下的加入第二个串,这样会导致顺序不对*/ 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 const in. 阅读全文

posted @ 2013-08-18 01:49 ok_boy 阅读(528) 评论(0) 推荐(0) 编辑

2013年8月17日

CF337C - Quiz

摘要: 1 /*题目大意,给出n道题,假设答对了m道题,求最小的分数,有一个规则,就是连续答对num==k道题那么分数就翻倍,然后num清零,从新开始计数,到大连续k道的时候 2 要先加上这道题的分数1,再乘以2, 3 做法:先将n中排出n/k个块,然后分类讨论,当n/kn-m那么说明n/k个块之间有些不能隔开,就是会出现连续的答对超过k的情况 5 所这种情况,采用插空法,每次插一个空分数就会翻倍,当插入一个空,那么分数是2*k,第二个是(2*k+k)*2 =2*k+4k,到第三个的时候总分是2k+4k+8k 6 以此类推,那么如果剩下的数目是remin,那么就要插remin个空,根据等比数列求和公. 阅读全文

posted @ 2013-08-17 16:04 ok_boy 阅读(505) 评论(0) 推荐(0) 编辑

337BRoutine Problem

摘要: 1 /*给出你图片的长和宽的比例a:b 和摄像头的比例c:d,然后叫你求最后将图片放进摄像头 2 以后,剩余的面积比上摄像头的总面积,注意要化简为最简形式,而且摄像头要设置成至少一条边和图片相等 3 做法;先将两个比例式子通分,分别比较分母和分子,通分以后必定有一条边是相等的,所以只要比较另一条边就可以了 4 */ 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 int gcd(int x,int y)11 {12 int t=1;13 while(t!=0)14 {t=x%y... 阅读全文

posted @ 2013-08-17 02:42 ok_boy 阅读(332) 评论(0) 推荐(0) 编辑

导航