摘要:
View Code 1 #include<stdio.h> 2 #include<math.h> 3 4 int main() 5 { 6 int a,b; 7 double con=(1+sqrt(5.0))/2; 8 while(scanf("%d%d",&a,&b)!=EOF) 9 {10 if(a>b)11 {12 a^=b;13 b^=a;14 a^=b;15 }16 int k=b-a;17 if(a==(int)(con*k))printf("0\n");18 ... 阅读全文
摘要:
View Code 1 /* 2 题意: 3 货币之间存在着转换 ,从一种货币转换到 4 另一种货币有有一个转换率,有没有这种情况 5 一种货币经过几次转换再回到这个货币时 6 会增值 7 8 思路: 9 这相当与一个路径问题,找到各个点的最大距离10 每次从一条边的左边的货币开始转换,看是否能11 增值 有几条边循环几次 12 */ 13 #include<iostream>14 #include<cstring>15 16 using namespace std;17 18 struct node19 {20 int a,b;21 double r;22 }E[10 阅读全文
摘要:
这是一道动态规划题目,利用一维数列的最大子段和求多维的最大子段和。下列代码中的 psub()子函数就是求一维数列的动态规划。我们依次吧几行数据加到一行上相当于选中了好几行,然后再判断取几列能使其最大。自己的代码:View Code 1 #include<stdio.h> 2 3 int map[101][101]; 4 int sum; 5 int r,c; 6 7 void psub(int i) 8 { 9 int j,t=0;10 for(j=0;j!=c;++j)11 {12 if(t>0)t+=map[i][j];13 else t=map[i... 阅读全文
摘要:
NYOJ 61 传纸条是一个双线DP的题:从矩阵的左上角(1,1)点到矩阵的右下角(m,n)点找到两条不相交的路径使其值最大,题中是从(1,1)到(m,n)走一次,再从(m,n)到(1,1)走一次,我们可以等价变形一下,变为:同时从(1,1)走向(m,n)找两条路,且这两条路不相交,同时走!假设有两个人在走,一个人的坐标为(x1,y1),另一个人的坐标为(x2,y2),有题中规定只能向下或向右走,则可得状态转移方程:f(x1,y1,x2,y3) = max { f(x1-1,y1,x2-1,y2) ,f(x1-1,y1,x2,y-1), f(x1,y1-1,x2-1,y2), f(x1,y1- 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 3 int a[1000001]; 4 5 int main() 6 { 7 int i; 8 int n,c,q,x,y,z,t; 9 scanf("%d%d%d",&n,&c,&q);10 while(c--)11 {12 scanf("%d%d%d",&x,&y,&z);13 a[x]+=z;14 a[y+1]-=z;15 }16 17 for(i=1;i<=n;++i)//求出各个人的功劳 18 {19 ... 阅读全文
摘要:
优秀博客推荐:各种数据结构与算法知识入门经典(不断更新)欢迎自荐和推荐链接。请于留言处告知。基本算法贪心算法:贪心算法作者:独酌逸醉 贪心算法精讲作者:3522021224递归和分治:递归与分治策略作者:zhoudaxia图论图的遍历(DFS和BFS):图的遍历 作者:jefferent最小生成树(Prim算法和Kruskal算法):贪心算法--最小生成树作者:独酌逸醉Dijkstra算法:最短路径之Dijkstra算法详细讲解作者:绿岩 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)作者:tankywooBellman-Ford算法:最短... 阅读全文
摘要:
求一个混合数列中 指定区间内第K小的数:View Code 1 #include<stdio.h> 2 3 int num[2010]; 4 5 int query(int L,int R,int K) 6 { 7 if(L == R)return num[L]; 8 int i=L; 9 int j=R;10 int mid=num[(L+R)/2];11 while(i<j)12 {13 while(num[i]<mid)i++;14 while(num[j]>mid)j--;15 if(i<=j)16 ... 阅读全文
摘要:
参考:http://en.wikipedia.org/wiki/Euler%27s_totient_functionView Code 1 #include<stdio.h> 2 3 int main() 4 { 5 int n,i; 6 bool flag; 7 while(scanf("%d",&n) != EOF) 8 { 9 int t=n;10 for(i=2;i<=t;++i)11 {12 flag=0;13 if(t%i==0)14 {15 ... 阅读全文
摘要:
View Code 1 /* 2 旋转都是废话 3 直接找他的中序序列就行 4 用数组 模仿建树 5 */ 6 #include<iostream> 7 #include<cstdio> 8 #include<algorithm> 9 using namespace std;10 11 struct node12 {13 int h;14 int L,R;15 }a[100];16 17 void slove(int n)18 {19 if(a[n].L!=-1)slove(a[n].L);20 printf("%d\n",n);21 i 阅读全文
摘要:
第一种:对于第一种填数:我们一 1 为起始点 先判断下一个点是否越界 和 是否是空的 ,来决定是转还是填View Code 1 #include<stdio.h> 2 3 int a[100][100]; 4 5 int main() 6 { 7 int n,i,j,t,x; 8 scanf("%d",&n); 9 t=n*n;10 x=0;11 i=-1;12 j=n-1;13 while(x<t)14 { 15 while(i<n-1&&!a[i+1][j])a[++i][j]=++x;16 while... 阅读全文