USACO2.3基础的算法题
2016-03-17 22:19
375 查看
prefix
没想到是queue + vis 形式dp…..dfs一直爆栈
然后最近代码量少了所以一开始爆搜都错很多次
罪过…罪过…
c++ //interesting input way while (fscanf (fin, "%s", data+ndata) == 1) ndata += strlen(data+ndata); //DP in official solution for (lv = 0; lv < ndata; lv++) if (start[lv]) { /* for each expressible prefix */ best = lv; /* we found a longer expressible prefix! */ for (lv2 = 0; lv2 < nump; lv2++) { for (lv3 = 0; lv + lv3 < ndata && prim[lv2][lv3] && prim[lv2][lv3] == data[lv+lv3]; lv3++); if (!prim[lv2][lv3]) /* it matched! */ start[lv + lv3] = 1; /* so the expanded prefix is also expressive */ } }
nocows
DP,和斐波那契类似,子问题太多,不DP会挂.但是一开始思路不是很清晰变量名很烂我也不知道为什么面向过程的设计变量名漂亮很重要…所以不知道挂到哪里了.
求出每一层的最大最小值,然后遍历从最小到最大(都能取到)应该是一个系数比较小的O(n3)
for (int nowNode=3; nowNode<=n; nowNode+=2) { //笔算公式 maxheight[nowNode]=(nowNode+1)/2; //枚举 int p=0; while (twoexp[p]<nowNode)p++; minheight[nowNode]=p; //代码美观真的很重要.. for (int conLeft=1; conLeft<nowNode; conLeft+=2) { for (int h=minheight[conLeft]; h<=maxheight[conLeft]; h++) { int conRight=nowNode-conLeft-1; for (int hr=minheight[conRight]; hr<=maxheight[conRight]; hr++) { int mh=max(h,hr)+1; dp[nowNode][mh]=(dp[nowNode][mh]+dp[conLeft][h]*dp[conRight][hr])%mod; } } } }
zerosum
dfs枚举运算符,序号判断有些麻烦..答案里面的字符串使用挺有意思的
char str[30]; strcpy(str, "1 2 3 4 5 6 7 8 9"); str[2*n-1] = '\0'; for(p=" +-"; *p; p++) { s[2*k+1] = *p; search(s, k+1); }
money
一开始觉得是多重背包(备注部分)…然后套01背包的公式过的…
最后发现是自己把01和完全的记反了……
for (int i=0; i<tot; i++) { for (int k=0; k<=aim-num[i]; k++) { ways[k+num[i]]+=ways[k]; } // for (int p=num[i]; p<=aim; p+=num[i]) { // for (int k=aim; k>=p; k--) { // ways[k]+=ways[k-p]; // } // } }
更惊讶的是..去查百度他说是母函数……
concom
一开始觉得暴力过不了,不想打然后发现暴力实现起来并不是那么容易
遇见了一些美好的心情后开始打,
每一次输入刷一遍(还是暴力..)过了很开心~
就像那句话说的那样
往往会低估计算机的能力,也往往会高估自己的编程能力.
心得
这一章主要是搜索和简单的dp,但是拖的时间相对长,一方面是因为自己广撒网,干别的事去了.另一方面是有一定的畏惧心理.今天真是美好的一天,各种美丽邂逅我的心情hh加油啊少年,长路漫漫,且行切坚定.相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析