自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (6)
  • 收藏
  • 关注

原创 关于本地ACM代码的声明

取自本地的代码请用G++编译器运行或提交,其它编译器可能会报错!!!本地代码仅供参考,请童鞋们先独立思考。如有优化的代码请留言,鄙人不胜感激!!!祝大家AC愉快!!!

2011-11-10 12:27:51 306

原创 HDU 2142 - disney

知识点:结构体二级排序#include #include #include struct Player{ char name[10]; int score;}player[100];inline int cmp(const void *a,const void *b){ Player *c=(Player *)a; Player *d=(P

2011-11-10 12:39:59 538

原创 HDU 3496 - Watch The Movie

知识点:二维背包#include #include int dp[101][1001],m,l;inline int max(int a,int b){ return a>b ? a : b;}void PlanarPack(int val,int ti,int temp){ if(ti<=l) { for(int i=m=1;i

2011-11-10 12:37:37 361

原创 HDU 2955 - Robberies

知识点:01背包的概率问题当前的概率基于前一种状态的概率,即偷n家银行而不被抓的概率等于偷n-1家银行不被抓的概率乘以偷第n家银行不被抓的概率。用dp[i]表示偷价值为i时不被抓的概率,则状态转移方程为:dp[i]=max(dp[i],dp[i-m]*(1-p))。#include #include double dp[10001];int sum;inline doubl

2011-11-10 12:35:05 380

原创 HDU 2133 - What day is it

知识点:       方法一:细节优化,小技巧起大作用。       方法二:Zeller公式法。//方法一:暴力法#include //公元一年一月一号是星期一inline bool leap_year(int year){ if((year%4==0&&year%100)||year%400==0) return 1; else return 0;

2011-11-10 12:32:40 626

原创 HDU 2602 - Bone Collector

知识点:01背包01背包是基础,一定要把01背包真正搞懂,那其它的背包就容易懂了。#include #include int dp[1001],V;inline int max(int a,int b){ return a>b ? a : b;}void ZeroOnePack(int val,int vol){ for(int v=V;v>=vol

2011-11-10 12:26:57 250

原创 HDU 1716 - 排列2

知识点:全排列函数 next_permutation( , );当然,暴力也可以解决。#include #include #include //包含于头文件using namespace std;inline int cmp(const void *a,const void *b){ return *(int *)a-*(int

2011-11-10 12:22:17 288

原创 HDU 1176 - 免费馅饼

知识点:1、数塔;                2、整数(int 型)输入外挂(可大大缩短数据输入的时间,对于数据庞大的题目效果显著)。#include #include //整数输入外挂,减少时间bool scan_d(int &n) { char i; bool I=0; i=getchar(); if(i==EOF) return 0

2011-11-10 12:19:16 265

原创 HDU 1503 - Advanced Fruits

知识点:最长公共子序列(LCS)dp[i][j]记录到a的第i个字符和b的第j个字符为止公共子序列的长度;path[i][j]记录公共子序列的走向;member[i]保存最长公共子序列的成员。#include #include int main(){ char a[101],b[101],member[101]; int dp[101][

2011-11-10 12:14:47 281

原创 HDU 1002 - A + B Problem II

知识点:大数加法#include #include void add(char *a,char *b) //大数加法模板{ int c[1000]={0},d[1000]={0},sum[1001]={0}; int len_a=strlen(a),len_b=strlen(b),i; for(i=0;i<len_a;i++) c[i]=a[l

2011-11-10 12:11:35 279

原创 HDU 1009 - FatMouse' Trade

知识点:贪心算法最简单的贪心:优先选择性价比高的。#include #include struct Cat{ int J; int F; double per; //性价比};inline int cmp(const void *a,const void *b){ return ((Cat *)b)->per>((Cat *)a)->p

2011-11-10 12:09:18 284

原创 七种qsort排序法(附模板)

七种qsort排序法   其中的在c语言中qsort函数包含在的头文件里,strcmp包含在的头文件里。 一、对int类型数组排序  int num[n]; int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } qsort(num,n,sizeof(num[0

2011-11-10 12:05:43 791

原创 HDU 1160 - FatMouse's Speed

知识点:最长有序(上升)子序列#include #include struct Mouse{ int weight; int speed; int num; //记录当前老鼠排序前的序号 int last; //记录为当前dp提供更新的前一个老鼠排序后的序号}mouse[1000];//结构体一级排序,按weight从小到大inlin

2011-11-10 11:59:45 316

原创 HDU - 旋转矩阵

知识点:找规律+指针模拟PS:其实这道题很简单,但看到很多大牛用了很多比较复杂的方法,所以贴上来大家切磋切磋。问题描述:旋转矩阵Time Limit:1000MS  Memory Limit:65536KTotal Submit:59 Accepted:31Description把前n*n个正整数1,2,...,n*n 从左上角开始,由外层至中心按顺时针方向螺旋排列

2011-11-10 11:55:31 666

原创 HDU 1234 - 开门人和关门人

知识点:字符串处理#include #include inline int calc(char *tmp) //计算时间。都换算成秒,就可以比较大小了{ return ((tmp[0]-'0')*10+(tmp[1]-'0'))*3600+((tmp[3]-'0')*10+(tmp[4]-'0'))*60+ (tmp[6]-'0')*10+(tm

2011-11-10 11:49:08 391

原创 HDU 1248 - 寒冰王座

知识点:完全背包背包总体上有两种使用方法:1、当物品的价值和体积不等时,用dp[ ]表示价值。2、当物品的价值和体积相等时,用dp[ ]表示状态。例如本题中,dp[i]==0表示无法达到价值i;dp[i]==1表示可以达到价值i。其它的背包也有这种性质。#include #include bool dp[10001];int V;void ComplatePack(

2011-11-10 11:45:07 322

原创 HDU 1465 - 不容易系列之一

知识点:递归 - 错排问题错排问题的通项公式:f[n]=(n-1)*(f[n-1]+f[n-2]);定义数组f[n]表示n封信时错排的情况数,在f[n-1]的基础上再加一封信并错排分两步: 第一步:把第n封信放在前面第i(i任意)封信的信封里,共n-1种情况。 第二步:把第i封信放入信封,有两种case:                 case 1:如果把i放到第n个信封里,

2011-11-10 11:42:19 315

原创 HDU 2031 - 进制转换

知识点:简单字符串处理#include void f(int n,int r) //进制转换模板{ if(n<0) { putchar('-'); n=-n; } char str[10]; int i=0; while(n) { int tmp=n%r; str

2011-11-10 11:39:31 231

原创 HDU 2037 - 今年暑假不AC

知识点:贪心 + 结构体一级排序#include #include struct TV{ int Ti_s; int Ti_e;};inline int cmp(const void *a,const void *b){ return ((TV *)a)->Ti_e-((TV *)b)->Ti_e;}int main(){ int n;

2011-11-10 11:36:08 277

原创 HDU 2047 - 阿牛的EOF牛肉串

知识点:递归分别定义两个数组:a[n],b[n]。a[i]表示第i个为'O'时的情况数,b[i]表示第i个不为'O'时的情况数,则第i个总的情况数就等于a[i]+b[i]; 从第一个开始: i=1  a[1]=1;b[1]=2; i=2  a[2]=b[1];b[2]=2*(a[1]+b[1); i=3  ...... ........... i=n  a[n]=b[n

2011-11-10 11:33:11 66

原创 HDU 2059 - 龟兔赛跑

知识点:DP#include int main(){ int l; while(scanf("%d",&l)!=EOF) { int n,c,t,vr,v1,v2; scanf("%d%d%d%d%d%d",&n,&c,&t,&vr,&v1,&v2); double dp[102]; //dp[i]表示从出发点

2011-11-10 11:30:36 310

原创 HDU 2098 - 分拆素数和

知识点:筛选法求素数原理:素数的倍数一定不是素数,从2开始,把素数的倍数全去掉。//素数筛选法模板/*如果把prime放在main外,prime自动赋值为0,省去一次循环赋值,所以用 *prime[i]==0表示是素数,否则不是素数 */bool prime[max]; prime[0] = prime[1] = true; int mid = (int)sq

2011-11-10 11:26:08 631

原创 HDU 2137 - circumgyrate the string

知识点:矩阵输出问题如果能把旋转矩阵搞懂,这就是小儿科的了。#include #include int main(){ char str[80]; int n; while(scanf("%s%d",str,&n)!=EOF) { int len=strlen(str); for(int i=0;i<len;i++

2011-11-10 11:22:07 340

原创 HDU 2159 - FATE

知识点:二维背包只是在一维的基础上加一维,其它的都一样。#include #include int dp[100][100],m,s;inline int max(int a,int b){ return a>b ? a : b;}void PlanarPack(int a,int b){ for(int i=b;i<=m;i++) for(

2011-11-10 11:19:14 235

原创 HDU 3744 - A Runing Game

知识点:简单数学题关键是建立数学模型。#include #include struct Player{ int x; int rank;};inline int cmp(const void *a,const void *b){ return ((Player *)b)->rank-((Player *)a)->rank;}int main()

2011-11-10 11:16:16 348

原创 HDU 1297 - Children’s Queue

知识点:递归 + 大数加法递归思路:设f[n]表示n个人时合法(女生不能单独出现)的情况数;1、当第n个人是男生时,只需前n-1个人排列合法,即:f[n-1]; 2、当第n个人是女生时,第n-1个也必须是女生,且前n-2个人排列可以合法也可以不合法,所有两种case:        case 1:前n-2个人排列合法,即:f[n-2];        case 2:前n-2

2011-11-10 11:12:44 300

原创 HDU 1003 - Max Sum

知识点:最大连续子序列和哇哈哈,一不小心刷到前10名去了,偷笑ING……#include bool scan_d(int &n) //整数输入外挂,减少时间{ char i; bool I=0; i=getchar(); if(i==EOF) return 0; while(i!='-'&&(i'9')) i=getchar();

2011-11-10 11:07:58 201

原创 01背包讲解

01背包问题题目:  有N件物品和一个容量为V的背包。第i件物品的体积(或费用)是vol[i],价值是val[i]。求解将哪些物品装入背包可使价值总和最大。 基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:dp[i][v]=

2011-11-10 11:01:05 514

原创 完全背包讲解

完全背包问题  题目:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积(费用)是vol[i],价值是val[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路:这个问题非常类似于01背包问题, 所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非

2011-11-10 10:57:14 402

原创 HDU 2844 - Coins

知识点:多重背包多重背包由01背包和完全背包构成,有了01和完全的基础,多重还是挺好理解的。#include #include bool dp[100001];int V;void ZeroPack(int val){ for(int v=V;v>=val;v--) if(dp[v-val]) dp[v]=1;}void CompletePack(i

2011-11-10 10:53:55 255

原创 多重背包讲解

多重背包问题  题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件体积(费用)是vol[i],价值是val[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本算法这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件

2011-11-10 10:49:00 341

原创 HDU 1997 - 汉诺塔VII

知识点:递归递归思路:设开始时盘子全在 A 柱上,要把盘子移到 C 柱上,中间柱是 B。首先,我们来判断一下是不是初末状态,即盘子全在 A 上或全在 C 上,这一定是合法的。其次,我们要对每种状态中最大的那个盘子的位置进行判断。因为我们知道,汉诺塔最大的那个盘子不可能在 B 上,只可能在 A 或者 C 上面。所以有3种情况:case 1:如果在 B 上面,一定是非法的,即可

2011-11-10 10:42:45 1410

原创 HDU 1085 - Holding Bin-Laden Captive!

知识点:母函数母函数类似背包,也有两种使用方法:1、用 f1、f2 存储放法数;2、用 f1、f2 存储状态。例如本题中:f1[i]==1 表示 i 值可以达到,f1[i]==0 表示 i 无法达到。#include int main() { int num_1,num_2,num_5; while(scanf("%d%d%d",&n

2011-11-10 10:35:25 250

原创 HDU 1063 - Exponentiation

知识点:小数(大数)乘法小数乘法的思想,就是把小数变成整数,乘完之后再加小数点。所以这道题的核心是:大数乘法。#include #include void times(char *a,char *b,char *t) //大数乘法,a和b相乘,结果赋给t{ int len_a=strlen(a),len_b=strlen(b); int c[10]={0}

2011-11-10 10:27:08 287

原创 HDU 1568 - Fibonacci

知识点:数论1、首先要知道 Fibonacci 数列的通项公式:F(N)=(1/√5)*[((1+√5)/2)^n-((1-√5)/2)^n] (n=1,2,3……)2、任何一个数 num 都可以写成 10^(m+n) 的形式,其中 m 为整数,n 为小数。则 10^n 就是 num 写成科学计数法时的小数部分;m+1 为 num 的位数。      例如:10234432=10^(7

2011-11-10 10:13:16 261

原创 HDU 1018 - Big Number

知识点:stirling(斯特林)公式N的阶乘的位数等于:log10(N!) 取整后加1。ceil(N)(包含与math.h)函数用于求上界,即不小于N的最小整数。#include #include #define PI 3.141592654int main(){ int t; scanf("%d",&t); while(t--) {

2011-11-09 23:46:28 242

原创 HDU 2093 - 考试排名

知识点:结构体三级排序其实只要懂了二级排序,其它的不管几级只要类推就行了。#include #include #include struct Student { char name[11]; int num; int time; }stu[100]; inline int cmp(const void *a,

2011-11-09 23:37:15 247

原创 C++类模板实现链队

/*定义链队*/template class LinkQueue { public: linkQueue(); //构造函数 bool isEmpty(); //判空函数 void enQueue(const T&); //进队函数 T deQueue(); //出队函数 T getHead();

2011-11-09 23:18:02 934

原创 计算表达式的值

其中的 linkStack.h 的定义在 linkStack 博文里。//用栈判断表达式是否合法,合法则计算,否则报错(不考虑除数为0的情况)/*程序包含的数学函数及替换字母: 函数名 替换字母double sin(double x) 'a'double cos(double x)

2011-11-09 23:08:33 334

原创 C++实现二叉树

其中的 linkStack.h 和 linkQueue 分别在 以下两篇博文里:linkStack 、linkQueue#include #include "linkStack.h"#include "linkQueue.h"using namespace std;//定义节点templatestruct node{ T data; //结点中保存的数据

2011-11-09 22:49:40 422

C++模版类实现顺序栈、链栈

压缩包内为栈的工程包;工程包括顺序栈、链栈的类的定义与实现;附适当注释;完全面向对象,类封装;测试类中用(纯)虚函数实现多态。

2012-10-28

C++模版类实现顺序表、单链表、双链表

压缩包内为线性表的工程包;工程内包括顺序表、单链表、双链表的类的定义与实现;附适当注释;完全面向对象,类封装;测试类中用(纯)虚函数实现多态。

2012-10-28

线性表类的定义与实现

压缩包内为线性表工程包。 工程包内包含顺序表、单链表、双链表的定义与实现,附有适当注释。 整个工程完全面向对象,封装成类(模版类)。

2012-10-27

C++实现邻接表、邻接矩阵

压缩包内为工程文件,内容包括邻接表、邻接矩阵类的定义及实现。其中包括深度优先搜索、广度优先搜索。

2012-01-07

C++实现哈夫曼编码

压缩包内为哈夫曼编码工程文件,包括哈夫曼树的定义及实现、编码译码、文件读写操作。

2011-11-27

C++实现二叉树

C++实现类模板,压缩包内为工程文件,其中的前序、中序、后序采用非递归遍历。

2011-11-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除