摘要: 我用的高精度加法模拟的,不过看到好多人0MS过了,肯定有更好的方法。AC代码先放这,回头再想。。。(据统计F(1000)是208位,开数组时注意。。。。)#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 1007;int f[N][217];int main(){ int i, j; f[1][0] = f[2][0] = 1; for(i = 3; i < N; i++) { for(j = 0; j <= 210; j 阅读全文
posted @ 2011-08-17 21:07 AC_Von 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 在说这题之前请容我先说几句:1047!你妹是multiple test cases!你全家都是multiple test cases!!!丫,高精度没啥说的,光格式WA了两次!这不是浪费时间吗!#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAX = 107;int sum[MAX];char ss[MAX];int main(){ //freopen("data.in", "r", stdin); 阅读全文
posted @ 2011-08-17 19:58 AC_Von 阅读(197) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,如有错误,欢迎指正。转载请注明:http://www.cnblogs.com/vongang/ 贪心算法的思想在于只求局部最优,不管全局如何。但是这样得出的结果往往也是全局最优的,当然也有的不是全局最优。以背包问题为例: [背包问题]有一个背包,背包容量是M=150。有7个物品,物品不可以分割成任意大小。要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 物品 A B C D E F G 重量 35 30 60 50 40 10 25 价值 10 40 30 50 35 40 30 分析: 目标函数: ∑pi最大 约束条件是装入的物品总重量不超过背包容量:∑wi&l 阅读全文
posted @ 2011-08-17 17:08 AC_Von 阅读(344) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,如有错误,欢迎指正。转载请注明:http://www.cnblogs.com/vongang/ 当对很大的数(比如100位)进行运算时,肯定不能c/c++内的数据类型直接运算(当然Java里的BigNumber可以。。。)这时就要用数组模拟运算过程。+, - ,*, /,运算貌似是小学学的东西,童鞋们,现在要用到小学的知识啦!!先说加法,大体的操作包括逆序、对位、求和、进位(其实就是小学的加法运算,不过是把数倒过来算,至于为什么要逆序。。。)例题:http://poj.grids.cn/practice/2981代码:#include <stdio.h>#inc 阅读全文
posted @ 2011-08-17 16:55 AC_Von 阅读(376) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,如有错误,欢迎指正。转载请注明:http://www.cnblogs.com/vongang/堆排序的涵盖很广,笔者也是初窥门径,写不了很高深的东西,这里就记录一些简单的用法。小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆。大根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。(这里讨论的只是二叉堆)建堆过程:堆排序过程堆排序动画演示:http://www.jcc.jx.cn/xinwen3/news/kj/flash/2004/0426/1297.htm典型题目HUD_1280 : http: 阅读全文
posted @ 2011-08-17 16:33 AC_Von 阅读(553) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,转载请注明:http://www.cnblogs.com/vongang/快排过程很简单,就是一个二分的思想,过程如下(从小到大为例):1、取一个关键字;2、把序列中大于关键字的放在关键字右边;3、把序列中小于关键字的放在关键字左边;4、重复1-3步,直到序列有序;代码+注释:#include<stdio.h>#define N 100int QuickSort1 (int r[], int low, int high){ int key; key=r[low]; /*取轴值记录关键字*/ while(low<high) /*从表的两端交替地向中间扫描*/ 阅读全文
posted @ 2011-08-17 16:12 AC_Von 阅读(334) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,转载请注明:http://www.cnblogs.com/vongang/二叉排序数的(递归)定义:1、若左子树非空,则左子树所有节点的值均小于它的根节点;2、若右子树非空,则右子树所有节点的值均大于于它的根节点;3、左右子树也分别为二叉排序树。如图:链表实现(比较简单):View Code #include <stdio.h>#include <malloc.h>typedef struct node{ int data; struct node * lchild; struct node * rchild;}node;void Init(node 阅读全文
posted @ 2011-08-17 15:54 AC_Von 阅读(386) 评论(0) 推荐(0) 编辑
摘要: VonGang原创,转载请注明:http://www.cnblogs.com/vongang/ 栈和队列都是最基础的数据结构,栈的思想是“先进后出”,队列的思想是“先进先出”。怎么说呢,栈和队列其实都是对于单链表或者数组的一些特殊操作。在后边很多算法中经常用到(比如BFS, SPFA。。。)栈主要操作有:入栈Push;取栈顶Get_Top;出栈(删除栈顶元素)Pop;栈的数组实现(代码非常简单,关键是思想)://数组实现#include <stdio.h>#include <malloc.h>#define maxsize 10typedef struct{ int d 阅读全文
posted @ 2011-08-17 14:55 AC_Von 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 第一道kmp的题目,没想到纠结在上边这么多时间,也不知道哪错了,反正改着改着就对了。。。#include <iostream>#include <cstdio>using namespace std;const int maxn = 1000000;const int maxm = 10000;int a[maxn+10], b[maxm+10];int next[maxm+10];void get_next(int num[], int m){ next[0] = -1; for(int i = 1, j = -1; i < m; i++) { while(j 阅读全文
posted @ 2011-08-17 09:10 AC_Von 阅读(230) 评论(0) 推荐(0) 编辑