随笔分类 - 递归
摘要:View Code 1 /* 2 1.先用并差集判断图是否连通 3 2.判断是否存在欧拉路或欧拉回路 4 3.DFS求欧拉路径 5 */ 6 #include<iostream> 7 #include<cstdio> 8 #include<cstring> 9 #include<algorithm> 10 using namespace std; 11 12 const int size = 1005; 13 14 struct nodedge 15 { 16 int e;//单词的最后一个字母 对应的数字 相当于:路径的末端 17 int id
        阅读全文
                
摘要:View Code 1 /* 2 题外话: 3 这道题看了好久开始以为是动态规划, 4 但怎么也看不出怎么做。 5 今看别人的代码发现竟如此简短! 6 而且还是 DFS 原来这是一道深搜题 7 而且还用到了 二分查找 8 思路: 9 先得到 可能的最小差值:是 first = map[n][n]-map[1][1];10 可能的最大差值是 last = 120(题中给的最大值)11 取中间值 mid =(first + last)/2;12 然后寻找 是否存在一条 最小差值是 mid 的路径13 最在则 说明 可能最在比 mid 更小差值的路径14 修改 last = mid;...
        阅读全文
                
摘要:View Code 1 #include<iostream> 2 using namespace std; 3 4 int divs(int m,int n) 5 { 6 if(m<0)return 0; 7 if(m == 0 || n==1)return 1; 8 return divs(m-n,n) + divs(m,n-1); 9 // 可以归纳为两种情况: 10 //divs(m-n,n) 表示 每个盘子中至少一个苹果 ,则剩下的 m - n个 可以 随意 向 n个盘子中放11 //divs(m,n-1) 表示 至少一个盘子 没有苹果 则 m...
        阅读全文
                
摘要:View Code 1 #include<stdio.h> 2 #include<iostream.h> 3 4 int divs(int m,int n) 5 { 6 if(n==1)return 1; 7 if(m == n)return 1; 8 if(m < n)return 0; 9 if(m>n)return divs(m-1,n-1) + divs(m-n,n);//divs(m-1,n-1)代表是第一位放 1 剩余的10 //m - 1位再在其余 n-1 位上分11 //divs(m-n,n)代表的是每一位上放的数字都大于112 //m ..
        阅读全文
                
摘要:View Code 1 #include<iostream> 2 using namespace std; 3 4 int divs(int m,int n) 5 { 6 if(m<1 || n<1)return 0; 7 if(m == 1 || n==1)return 1; 8 if(m<n)return divs(m,m); 9 if(m == n)return divs(m,m-1) + 1;10 return divs(m,n-1) + divs(m-n,n);11 }12 13 int main()14 {15 int t,n;16 cin>&g
        阅读全文
                
摘要:View Code 1 /*参考 DP 中的 15题*/ 2 #include<iostream> 3 #include<cstring> 4 #define min(x,y) x<y?x:y 5 using namespace std; 6 int num[110][110]; 7 char ch[110]; 8 int comp(int i,int j) 9 {10 if(ch[i]=='('&&ch[j]==')')return 1;11 if(ch[i]=='['&&ch[j]
        阅读全文
                
摘要:View Code 1 /* 2 问题:按字典序全排列 3 法一:分别以数字i开头 利用递归深搜 4 */ 5 #include<iostream> 6 using namespace std; 7 bool flag[10]; 8 int n,m; 9 void digui(int h,int b[],int x)10 {11 int i;12 if(x==m)13 {14 for(i=0;i<m;++i)15 cout<<b[i];16 cout<<endl;17 return ;18 }19 for(i=1;i<...
        阅读全文
                
                    
                
浙公网安备 33010602011771号