自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 南阳 779 兰州烧饼

思路 饼为两面 so n*2 5 3 、、time = 10/3+1---->无论10%3=几 都是可以被一次烙玩 所以 if((2*n)%m!=0) sum++   #include #include int main(){ int n,k; while(~scanf("%d%d",&n,&k)){ if(n<=k){

2014-03-29 21:33:46 587

原创 蓝桥 幸运数

根据埃氏筛法找素数改编的 #include #include #include int num[1000010]; int main(){ int n,m,i,j,t,k; long stra,end; while(~scanf("%d%d",&n,&m)){ stra=clock(); for(i=1;i<=m;i++)

2014-03-21 17:09:39 519

原创 南阳 49 开心的小明

#include #include int dp[30010]; int max(int a,int b){ return a>b?a:b; } int main(){ int t,n,m,i,j; int num[30],val[30]; scanf("%d",&t); while(t--){ memset(dp,0,

2014-03-19 21:26:22 625

转载 最长上升子序列(LIS)长度的O(nlogn)算法 .

hdu 1950 Bridging signals http://acm.hdu.edu.cn/showproblem.php?pid=1950 =================================== 最长上升子序列(LIS)的典型变形,熟悉的n^2的动归会超时。LIS问题可以优化为nlogn的算法。 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序

2014-03-18 22:06:46 772

原创 南阳 79 拦截导弹

最长单调递增子序列(LIS) #include #include int num[100],arr[100],len; int BSE(int i){ int l=0,r=len,mid; while(l<r){ mid=l+(r-l)/2; if(arr[mid]>=num[i]){ r=mid-1;

2014-03-18 22:03:40 699

原创 hdu 1159 Common Subsequence

算法: 最长公共子序列(LCS) 状态转移方程: 当 i = 0 , j = 0 时 , c[i][j] = 0 当 i , j > 0 ; xi = yi 时 , c[i][j] = c[i-1][j-1] + 1 当 i , j > 0 ; xi != yi 时 , c[i][j] = max { c[i][j-1] , c[i-1][j] } #include #include

2014-03-18 17:42:45 434

转载 链式前向星

我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head[i]记录以i为边集在数组中的第一个存储位置. 那么对于下图:

2014-03-17 16:56:11 514

原创 蓝桥 最短路

链式前向星   #include #include #define inf 100000 //结构体前向星 //蓝桥oj用C编译不能用typedef struct In{ int e;//终点 int w;//权值 int next;//下一条边的存储位置 }map[200010];// map【】中是边数 int dis[20010],Q

2014-03-17 16:55:10 632

原创 蓝桥 打印十字图

解题报告 #include #include int main(){ int num[200][200]; int n,m,i,j,k; while(~scanf("%d",&n)){ memset(num,0,sizeof(num)); m=9+(n-1)*4; for(j=1;j<=m/2;j++){

2014-03-16 16:41:35 534

原创 hdu 2041 超级台阶

斐波那契数 问题: 一个简单的数学问题 有一楼梯共10级,如果每次只能跨上1级或2级,要登上第十级,共有( )种不同走法? 最佳答案: 若只有1级楼梯有一种方法。 2级楼梯就会有两种方法。 ... n级楼梯,若先走1步,则下面还剩下n-1级楼梯 如果先走2步,下面还剩下n-2级楼梯 所以走n级楼梯的方法总数是n-1级楼梯的方法总数加上n-2级楼梯的方法总数。 即3级楼梯等

2014-03-16 11:23:09 512

原创 蓝桥 连号区间

因为n个数字肯定是1~n,那么在某个区间内,最大的数减去最小的数为区间长的话,那么这个区间肯定是连号区间 #include #include int num[50010]; int main(){ int n,max,min,i,s,j; while(~scanf("%d",&n)){ memset(num,0,sizeof(num));

2014-03-16 09:39:28 476

原创 hdu 2189 来生一起走

#include #include int main(){ int num[35]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149}; int n,k,i,j,t; int c1[160],

2014-03-16 09:06:34 514 2

原创 hdu 2069 Coin Change

#include #include int main(){ int c1[300][110],c2[300][110];//前一个括号是指系数 后一个指硬币个数 int num[5]={1,5,10,25,50}; int n,i,j,k,t,s; while(~scanf("%d",&n)){ memset(c1,0,sizeof(c

2014-03-15 18:01:02 495

原创 hdu 1398 Square Coins

#include #include int main(){ int c1[310],c2[310]; int n,i,j,k; while(scanf("%d",&n),n){ for(i=0;i<=n;i++){ c1[i]=1; c2[i]=0; } fo

2014-03-15 16:16:17 492

原创 hdu 2082 单词数

#include #include int main(){ int num[30],c1[60],c2[60]; int n,s,i,j,k,t; scanf("%d",&n); while(n--){ memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2));

2014-03-15 16:07:15 487

原创 蓝桥 买不到的数目

#include #include int c1[1000010]; int main(){ int n,i,j,k,m; while(~scanf("%d%d",&n,&m)){ memset(c1,0,sizeof(c1)); for(i=0;i<=m;i++){ c1[i*n]=1; }

2014-03-15 12:02:46 495

转载 母函数

母函数

2014-03-15 11:46:26 420

原创 蓝桥 大臣的旅费

只要将图用邻接矩阵表示出来,然后用Floyd算法去求任意两点之间的最短距离,只要求出距离,剩下的求要花最多多少钱在容易不过啦。这个题目就是找到任意两点最短路径的最大值,这样的话就可以求出最多花多少钱。 #include #include #define inf 10000 int map[110][110]; int Floyd(int n){ int i,j,k; for(k=

2014-03-14 17:49:41 562

原创 南阳 212 k尾数相等

数组用的很巧妙,不错的想法 #include #include int main(){ int num[1010]; int n,k,i; long long s; scanf("%d",&k); while(k--){ memset(num,0,sizeof(num)); scanf("%d",&n); s=1;i=0; while(s<1000

2014-03-12 21:45:17 1006

原创 hdu 2209 翻纸牌

分析:从最终结果出发不管最终纸牌翻转成什么样,第一张纸牌只有两种情况:1.翻转过,2:未翻转过 而影响第一张纸牌的只有本身和第二张纸牌, 所以分两种情况:1:第一张纸牌本身翻转,然后搜索第2,3,4,....n张并由第i-1张纸牌是否正面朝上而决定第i张是否翻转(第i-1张纸牌前的纸牌已全部正面朝上),最后只需要判断第n张纸牌是否正面朝上即可 2:第一张纸牌本身不翻转,然后过程和第1种情况一

2014-03-10 17:09:27 529

原创 九度 1550 分糖果

#include #include int num[100100],f[100100]; int main(){ int n,i,s; while(~scanf("%d",&n)){ memset(num,0,sizeof(num)); for(i=0;i<n;i++){ scanf("%d",&num[i])

2014-03-10 11:16:53 639

原创 九度 1527 首尾相连数组的最大子数组和

思路: 问题的解可以分为两种情况: 1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值 2)解跨过A[n-1]到A[0] 对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0 M_2=A[i]+...A[n-1]+A[0]+...+A[j] 如果i M_2=A[0]+...+A[n-1] - 子数组和为负的最小值(数组元素全为正则返回0

2014-03-10 11:04:20 624

原创 南阳 915 +-字符串

从局部开始考虑到整体 #include #include int main(){ char s[5010],str[5010]; int n,i,ans,m,t,j; while(~scanf("%s",s)){ scanf("%s",str); n=strlen(s); for(m=t=i=0;i<n;i++){ if(s[i]=='+'){

2014-03-09 17:11:32 582

原创 hdu 1203 I NEED A OFFER!

题目要求的是至少收到一份Offer的最大概率,我们算出得不到的最小概率即可,状态转移方程:dp[j]=min(dp[j],dp[j-val[i]]*(1-p[i]));其中,p[i]表示得到的概率,(1-dp[j])为花费j元得到Offer的最大概率    #include int w[10010]; double dp[10010], p[10010]; int main(){ in

2014-03-09 15:55:44 525

原创 hdu 2955 Robberies

这是一道背包题,需要转化一下。 这个小偷想偷银行的钱,给你被抓的最大概率,和N家银行。下面N行代表的是这家银行都多少钱,和被抓的最大概率。 有这时候我们关键的是怎么写出动态方程出来:   我们学习的10背包是两种方面构成的,一是背包的最大体积,二是装入背包物品的价值和体积。 我们来模拟这个过程,首先: 将全部银行的钱当做背包的最大体积 那么每家银行的钱则当做物品的体积 那么被抓的概

2014-03-09 11:39:46 470

原创 qsort()与bsearch()

qsort 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 bsearc

2014-03-09 09:51:02 547

原创 hdu 2546 饭卡

#include #include #include int dp[1010][1010],val[1010]; int max(int a,int b){ return a>b?a:b; } int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b; } int main(){ i

2014-03-09 09:41:51 536

转载 01背包问题

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

2014-03-08 19:45:48 694

原创 hdu 2602 Bone Collector

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] }f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。 Pi表示第i件物品的价值。 决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?

2014-03-08 19:40:09 481

原创 南阳274 最小公倍数

S个数的最小公倍数,为这S个数中所含素因子的最高次方之间的乘积。 自然数1至50的最小公倍数, 因为,√50≈7,所以,在50之内的数只有≤7的素数涉及N次方。在50之内,2的最高次方的数为32,3的最高次方的数为27,5的最高次方的数为25,7的最高次方的数为49,其余为50之内的素数。 所以,1,2,3,4,5,6,…,50的最小公倍数为: 32*27*25*49*11*13*17*1

2014-03-04 18:55:09 928

原创 南阳 263 精挑细选

#include #include #include typedef struct In{ int x; int y; int z; }; int cmp(const void *a,const void *b){ In *c=(In *)a; In *d=(In *)b; if(c->x!=d->x) return d->x-

2014-03-02 14:54:22 686

原创 南阳 103 A+B Problem II

#include #include int main(){ int t,num1[1010],num2[1010]; char s1[1010],s2[1010]; int n,m,i,j,k; scanf("%d",&t); for(k=1;k<=t;k++){ memset(num1,0,sizeof(num1)); memset(num2,0,sizeof

2014-03-02 14:08:43 662

原创 hdu 1272 小希的迷宫

1. 判断是否成环; 2. 判断是否只有一棵树; 3.0 0 也要输出Yes#include #include int father[100010],s; int vis[100010]; int find(int x){ if(x==father[x]) return x; else father[x]=find(father[x]); return father[x];

2014-03-01 17:56:02 578 1

原创 并查集原理

http://wenku.baidu.com/view/7ed5c917866fb84ae45c8da5.html 讲的很不错的!!!

2014-03-01 17:02:46 673

原创 hdu 1232 畅通工程(并查集)

#include int pre[1010]; int find(int x){ if(x==pre[x]) return x; else pre[x]=find(pre[x]); return pre[x]; }//查询 ,即查找集合的代表元素(查找树根) //路径压缩采用递归的方法(递归实现简洁、常见) void join(int x,int y){ int

2014-03-01 17:00:09 594 2

空空如也

空空如也

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

TA关注的人

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