摘要:
大概理解了一下别人的代码#include "iostream"#include "cstdio"#include "cmath"#include "algorithm"using namespace std;const double PI=acos(-1.0);const int size=1005;const double eps=1e-8;struct Point{ int x, y;}p[size];int s[size], top;int zfcmp(int d){ if(abs(d) < eps) 阅读全文
摘要:
汉诺塔是一种生活中的游戏,从现实生活的角度考虑,逐层的递归,假定是最优,从而形象的得出递归方程f(n)=3*f(n-1)+2,f(1)=2;先将n-1个通过B柱放到C柱,再将第N个放到B柱,然后再将n-1个通过B柱放到A柱再将第N个放到C柱,最后将n-1个放到C柱,n-1个总共3次,第N个总过2次再将递归式进行递推得到公式pow(3,n)-1#include <math.h>#include <stdio.h>int main(void){ int n; while (scanf("%d", &n) != EOF) printf(" 阅读全文
摘要:
一看汉诺塔的次数,第一感觉是数学题,但一看答案是dp出乎意料,对dp有了更加全面的理解,主要是递归的规划,从复杂的递归回归的基础的递归#include <stdio.h>#include <math.h>__int64 ans[65];double _min,temp,f[65];int main(){ int i,j,n; f[0]=1; for(i=1;i<65;i++) f[i]=f[i-1]*2; ans[1]=1; for(i=2;i<65;i++) { _min=pow(2,64)-1; for(j=1;j<i;j++) { temp=2* 阅读全文
摘要:
基础二分图应用,注意理解#include <stdio.h>#include <string.h>int k,m,n,a[501][501];int visit[501];int linker[501];int dfs(int u){ int i; //visit[u]=1; for(i=1;i<=n;i++) { if(a[u][i]&&!visit[i]) { visit[i]=1; if(linker[i]==-1||dfs(linker[i])) { ... 阅读全文
摘要:
主要是欧拉回路的基础知识,用并查集加工处理注意欧拉回路和并查集的细节判断不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间#include <stdio.h>#include <string.h>int vis[30],in[30],out[30],father[30];int findx(int t){ if(father[t]!=t) father[t]=findx(father[t]); return father[t];}void merge(int v,int g){ int x,y; x=findx(v); y=findx(g); if(x!=y) 阅读全文
摘要:
代码不能粘贴复制,只有充分理解之后自己亲手敲的才是真正理解了,即使是参考他人的也有收获理解了tarjian算法让自己对算法有了好感,感觉算法真的好强,解决看起来不能解决的问题,那是一种超越#include <iostream>#include <cstdio>#include <vector>#include <stack>#include <algorithm>using namespace std;#define MAXVER 10010vector<int> g[MAXVER];stack<int> st 阅读全文
摘要:
本题主要是题意的理解,背景要看规则。模拟的时候一定要注意if判断的顺序,从整体到分支,提高速度#include <stdio.h>int main(){ int n,m,as,ds,i,sum; scanf("%d",&n); while(n--) { scanf("%d%d%d",&m,&as,&ds); sum=0; if(as>ds) { printf("Yes\n"); } else { if(m==0) { printf("No\n"); } else i 阅读全文