摘要:
#include <iostream>#include <cstdio>#include <string>using namespace std;#define X 305string s;int map[X][X],color[X],n,x,y,len,c,ans;bool check(int a,int col) //检查顶点a的颜色能否涂成col{ for(int i=1;i<=n;i++) if(map[a][i]&&color[i]==col) //相邻节点颜色与他一样,不行 return false; return true 阅读全文
摘要:
编辑器加载中.../*题目: 问周游一圈后能不能换钱得到利润分析: 有向图是否处在负环问题,因为涉及每个顶点都可能存在负环, 直接用flord算法做即可*/#include <iostream>#include <string>#include <cstring>using namespace std;#define X 35string city[X],s1,s2;double map[X][X];int main(){ freopen("sum.in","r",stdin); freopen("sum.o 阅读全文
摘要:
/*题目: 象棋中马如何走到指定地点分析: BFS题,分8个方向搜就行 具体的图型可以看看poj1915题的8个方向,理解BFS后很容易写出*/#include <iostream>#include <cstring>#include <queue>#include <cstdio>using namespace std;#define X 310int sx,sy,ex,ey,n;bool visit[X][X];struct node{ int x,y,step;};bool check(int x,int y){ if(x<1||y& 阅读全文
摘要:
此方法是看了别人的题解的,利用像dp的思维做,f[m][n] = f[m][n-1]+f[m-n][n],其中f[m][n]表示m个水果n个盘子时总的放的方法数,因为f[m][n]总可以通过有空盘子或者没空盘子来放,f[m][n-1]表示有空盘子的情况,而f[m-n][n]表示没有空盘子的情况,思路非常巧妙#include <iostream>using namespace std;int ans;int dfs(int m,int n){ if(m==1) return 1; if(m<0) return 0; if(n==1) return 1; return dfs(m 阅读全文
摘要:
/*题目: 填充数独游戏分析: 先从后面开始搜,也就是从第八十个开始搜 1、如果一个小的方格内已经包含了非零的数,则继续向下搜 2、如果一个小的方格内是一个零数,也就是还没有放入相应的数,则对其从零到九开始尝试 3、对每一个数的尝试,检查其合法性:在其所在的3*3方格内是否合适;在此行是否合适,在此列是否合适 4、如果经过以上条件可以的话那么这个数字就可以放在此小方格上,然后继续进行搜索。*/#include <iostream>#include <cstring>#include <string>using namespace std;int a[10][ 阅读全文
摘要:
终于靠自己A了一道比较难的题了(n_n)据说是减枝题,不过我的剪枝还有待提高,以下做法竟然差点time limitted(985MS)我自己的思路:DFS搜索题,按当前需要构造的分数值,当前分母的总乘积,已经有了的个数,上一层分母值进行搜索,当遇到已经有了的个数等于a时,返回假,否则从上一层的分母值开始为下一个分数进行检查是否满足条件,满足的话答案加一#include <iostream>#include <cmath>using namespace std;#define X 1e-8int p,q,a,n;int ans;bool dfs(double cs,int 阅读全文