自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDOJ 1856 More is better 杭电 ACM

此题对时限有要求了 按照PPT进行了优化(相应的变量名都不变)#includeint r,i,j,p[10000001],s[10000001],a,b,n,m;int rt(int x){ r=i=x; while(r!=p[r])r=p[r]; while(i!=r)j=p[i],p[i]=r,i=j;//j临时存放旧父节点 新父节点变成根 再递归到旧父节点

2013-08-19 14:00:08 513

原创 HDOJ 1325 Is It A Tree? 杭电 ACM

从题意上说 与1272的唯一区别就是有向和无向的区别实际上 有向路径对结果的影响判定和无向是不同的#includeint t=0,i,p[100005],s[100005],a,b,cnt,flag;int rt(int x){return p[x]==x?x:rt(p[x]);}void f(int a,int b){ if(rt(a)!=rt(b)&&b==p[b

2013-08-08 18:38:02 621

原创 HDOJ 1213 How Many Tables 杭电 ACM

比1232更原始的并查集#includeint t,m,n,i,p[1001],a,b,cnt;int rt(int x){return p[x]==x?x:rt(p[x]);}void f(int a,int b){ int x=rt(a),y=rt(b); if(x!=y)p[x]=y;}int main(){ scanf("%d",&t); wh

2013-08-08 17:23:33 641

原创 HDOJ 1272 小希的迷宫 杭电 ACM

这题的基本结构和1232一样  但无需考虑重复输入路径(包括颠倒)的情况  所以出现同根必然有回路另外 要考虑无顶点的空图 给出特判以上两点 题中似乎未给出明确信息#includeint n,i,p[100005],s[100005],a,b,cnt,loop;int rt(int x){return p[x]==x?x:rt(p[x]);}void f(int a,

2013-08-08 16:59:21 580

原创 HDOJ 1232 畅通工程 杭电 ACM

并查集原始题 看懂PPT上代码后空手练的寻根函数用了递归但未超时#includeint n,m,i,p[1001],a,b,cnt;int rt(int x){return p[x]==x?x:rt(p[x]);}void f(int a,int b){ int x=rt(a),y=rt(b); if(x!=y)p[x]=y;}int main(){

2013-08-07 20:19:06 529

原创 HDOJ 2553 N皇后问题 杭电 ACM

N皇后的原理不再赘述 这题让我发现HDOJ判断超时的依据是从输入开始算的#includeint x1[19],x2[19],r[19],n,s,a[11],i;void f(int i){ if(i>n){ s++; return; } for(int j=1;j<=n;++j){ if(!r[j]&&!x1[

2013-07-22 09:42:58 1303

原创 HDOJ 4508 湫湫系列故事——减肥记I 杭电 ACM

比1114更简单的完全背包 题中说n种食物默认每种不限数量#includeint f[100001],n,m,i,j,a[100],b[100];int main(){ while(~scanf("%d",&n)){ for(i=0;i<n;++i)scanf("%d%d",a+i,b+i); scanf("%d",&m); fo

2013-07-21 20:03:21 553

原创 HDOJ 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 杭电 ACM

不用二进制优化也可以AC 就是01背包的方法这里按PPT优化了 部分空间和时间复杂度从O(n)降低至O(log2(n))#includeint f[101],v[500],c[500],t,n,m,p,h,x,C,cnt,i,j;int main(){//每种大米最多20袋 二进制优化占5位 至多100种 数组开500足够 scanf("%d",&C); while

2013-07-21 19:32:51 584

原创 HDOJ 1114 Piggy-Bank 杭电 ACM

完全背包 代码看起来和01背包很像#includeint a[10001],e,f,n,p[500],w[500],t,i,j;int main(){ scanf("%d",&t); while(t--){ scanf("%d%d%d",&e,&f,&n); for(i=0;i<n;++i)scanf("%d%d",p+i,w+i);

2013-07-19 13:12:59 447

原创 HDOJ 2602 Bone Collector 杭电 ACM

01背包的经典题 优化空间复杂度(一维数组)的版本流传甚广 这里也给出原始版本(二维数组)原始版本 注意要考虑0体积的物品#include#includeusing namespace std;int f[1002][1002],N,V,w[1002],v[1002],t,i,j;int main(){ cin>>t; while(t--){

2013-07-19 09:40:33 439

原创 HDOJ 1003 Max Sum 杭电 ACM

这题需要考虑很多不同的情况曾经写过一个不用任何数组的AC版本 现在拿出来WA了 可见测试数据更新过今天按原来的思路 加了个数组写了新版本AC了数组s用来保存可能出现最大和的值 还要考虑其负值的可能性 加了之后便于找b(begin)注意输出的坐标是首个出现的符合条件的串 就是要抓住所有前缀0 放弃所有后缀0 前缀0可能是若干正数开头的和为0的整数以下代码很

2013-07-18 22:16:02 486

原创 HDOJ 1058 Humble Numbers 杭电 ACM

老刘动归PPT里最后一题 里面已给出算法提示注意输出时需要遵循的后缀原则以下代码需用G++环境AC HDOJ的C++编译似乎不支持某些输出流#includeusing namespace std;int main(){ int i,j,n,x2,x3,x5,x7,f[5843]={0,1}; string r; for(x2=x3=x5=x7=1,i

2013-07-18 18:06:45 501

原创 HDOJ 1421 搬寝室 杭电 ACM

此类的状态转移方程非常经典但先要理解为何每趟只搬相邻的 PPT中给出的不等式很有帮助#include#includeusing namespace std;int n,k,i,j,t,a[2001],f[2001][1001];//f[x][y]保存x件物品中搬y趟(共2y件)的最优解int main(){ while(cin>>n>>k){ for(i

2013-07-18 09:37:24 1531

原创 HDOJ 1159 Common Subsequence 杭电 ACM

方法在老刘的PPT里已经给出 该代码在G++环境下AC  否则会停止编译 稍改可适应其他环境#includeusing namespace std;int i,j,xl,yl,f[1001][1001]={0};int main(){ string x,y; while(cin>>x>>y){ xl=x.length(),yl=y.length();

2013-07-16 16:32:22 803

原创 HDOJ 1160 FatMouse's Speed 杭电 ACM

DP原理和1087几乎相同 稍多些其他工作注意:解不唯一  我的输出和范例不同也AC了为了方便用SWAP排序 换成C++写#includeusing namespace std;int main(){//w=weight v=velocity p=previous a=area 分工明确吧 s先作状态转移方程 后作栈 int i,j,n=0,x,y,w[1001],

2013-07-16 14:19:28 846

原创 HDOJ 1087 Super Jumping! Jumping! Jumping! 杭电 ACM

又一道DP入门题 #includeint main(){ int i,j,n,a[1001],s[1001],m;//s[i]存放的是 若最大路径经过i点时该点之前(包含自身)的累积和 while(scanf("%d",&n),n){ scanf("%d",&a[0]); for(m=s[0]=a[0],i=1;i<n;++i){

2013-07-14 17:44:55 469

原创 HDOJ 1097 A hard puzzle 杭电 ACM

本题代码看似简单 但其背后蕴含的数学原理非常重要 而且巧妙程序的核心是“同余幂”算法  即求a^b mod m(a的b次方整除m的余数)的算法 本题中恰好m=10该算法中涉及以下数学知识1.将指数化为二进制后 底数不断平方 在相应的二进制位为1的地方 乘入结果 运算复杂度从O(n)降低至O(log(n))(以2为底) 2.若干整数之积 mod m的结果 就是每个整数各自mo

2013-07-13 21:44:25 592

原创 HDOJ 4540 威威猫系列故事——打地鼠 杭电 ACM

本题可以作为DP下状态转移方程的入门练习既可以按传统的顺序转移方法 也可以逆向运算 顺序方法在网上已有人给出以下给出逆向的方法#include#include#includeint main(){ int n,k,i,j,j2,m,a[20][10],s[20][10],t;//s[i][j]保存若最短路经过a[i][j]时该点后的最短路径之和 w

2013-07-13 20:42:24 601

原创 HDOJ 1176 免费馅饼 杭电 ACM

动归水题 类似树塔虽然AC了 但有一个疑问:题目规定T(代码中t)开100000时 a[0]不存放输入数据 只存放末行结果  a[1]~a[99999]完全符合0要开100001难道有T=100000的输入?这似乎与题目要求相矛盾 难怪比赛时大家都习惯多开几位以下是我的C版本#include#includeint a[100001][13];//x的

2013-07-13 16:53:22 703

原创 HDOJ 1215 七夕节 杭电 ACM

本题是杭电ACM历来的菜鸟训练题 以下是我的紧凑版本 仅供参考#include#includeint main(){ int t,i,n,s,q; scanf("%d",&t); while(t--){ scanf("%d",&n); q=(int)sqrt((double)n); for(i=2,s=0;i<q+

2013-07-12 13:33:37 1153

原创 HDOJ 4524 郑厂长系列故事——逃离迷宫 杭电 ACM

腾讯马拉松的一道题纯贪心左边比右边多就死 若不是则相减 作为下次的左边 以此类推 要想消完 经过前n-1个箱子操作后剩余的数 必须和第n个相等出循环后的判断 对只有一个箱子的特例亦有效值得注意的是 任意一次操作中左边多于右边就可判定失败 但此时不能立刻跳出宣布结果 因为还要等输入剩余箱子的数 这样才符合OJ判断#includeusing namesp

2013-04-06 11:10:46 669

空空如也

空空如也

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

TA关注的人

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