- 博客(7)
- 收藏
- 关注
原创 最长上升子序列
求最长上升的子序列 1.找子问题“求以ak(k=1, 2, 3…N)为终点的最长上升子序列的长度” 一个上升子序列中最右边的那个数,称为该子序列的 “终点”。 虽然这个子问题和原问题形式上并不完全一样,但 是只要这N个子问题都解决了,那么这N个子问题的解中, 最大的那个就是整个问题的解。 41 2. 确定状态: 子问题只和一个变量-- 数字的位置相关。因此序列中数 的位置k 就
2014-10-30 01:11:08 392
原创 poj 1182 食物链
给出K句话来描述N个动物(各属于A、B、C三类之一)之间的关系,K句话中有真话有假话,当一句话满足下列三条之一时,这句话就是假话,否则就是真话。1)当前的话与前面的某些真的话冲突,就是假话;2)当前的话中X或Y比N大,就是假话;3)当前的话表示X吃X,就是假话。 求假话的总数。 注意:这道题是单组数据输入...... 一.输入三个数 : 关系d 动物1:x 动物2:y x与y的关
2014-10-28 07:01:28 295
原创 poj 1988--E - Cube Stacking
#include const int Max=30010; int cube[Max]; int sum[Max]; int under[Max]; int find(int a){ if(cube[a]==a) return a; int t=find(cube[a]); under[a]+=under[cube[a]]; cube[a]=t;
2014-10-26 13:38:20 434
原创 HDU 1213--A - How Many Tables
#include const int Max=1000; int r[Max+10]; int find(int a){ if(r[a]==-1) return a; return r[a]=find(r[a]); } void Merge(int a,int b){ int fa=find(a); int fb=find(b); if(fa
2014-10-26 08:55:45 357
原创 poj 1611 __ The Suspects(第一天)
#include const int Max=30000; int sa[Max+10]; int total[Max+10]; int find(int a){ if(sa[a]!=a) sa[a]=find(sa[a]); return sa[a]; } void Merge(int a,int b){ int fa=find(a); int f
2014-10-26 01:51:40 413
原创 HDU__A - How Many Tables(第一天)
#include const int Max=1000; int tab[Max+10]; int total[Max+10]; int find(int a){ if(tab[a]!=a) tab[a]=find(tab[a]); return tab[a]; } void Merge(int a,int b){ int fx=find
2014-10-25 19:48:07 351
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人