20200130还是宅在家的搜索入门训练

是昨天的小结,昨天忘记写了今天补上

一天就做了两道题 害 有点难受

两道都是dfs的题,本来想再做一个bfs,算辽,游戏时间还是打游戏比较快乐:)

感谢lyxdl帮我发现的问题(虽然现在有点忘了是哪四个了bmw)

  1.全局int n差点弄死自己hhhhh和ldl

  2.想图简便结果把自己坑到,其实现在也没想为什么不行,复杂度是为什么不对(就是懒没错,大概除了线代,现在没有哪个科目让我能一个点都不放过了emmmm

  3.判断成立条件,对于这类需要枚举到底的题,可以加上判断是否到底的条件(像我那种带了打底的好像不用嘿嘿

  4.忘了emmm不过我记得好像是小问题那就不管啦

以及ldl教的技巧:

  1.2*n==n>>1

  2.循环上限需要计算的时候,再初始条件处设置lim(先计算省时间

  3.TBC

 

===================================分割线===================================

 

记一下我俩写的代码对比

===================================分割线===================================

 

 大佬的(其实就只有中间算法不一样

#include 
#include 
#include 
#include 
#include 
#include
#include
#include
using namespace std;
char a[20]={'+'},lis[]={' ','+','-'};
int n;
inline int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int realize(){
	int f=1,ans=0,sum=0;
    for(int i=0;i<=(n<<1);i+=2){
		if(a[i]!=' ')
		{
			ans+=f*sum,sum=a[i+1]-'0';
			if(a[i]=='+')	f=1;
			else			f=-1;
		}
		else
		{
			sum=sum*10+a[i+1]-'0';
		}
	}
	if(ans==0)	return 1;
	return 0;
}
void dfs(int m)
{
    if(m==n){
		if(realize()){
	        for(int i=1;i<=2*n-1;i++)cout< 
 

  

===================================分割线===================================

 我滴(之前为了简洁差点把自己弄死于是干脆放飞自我

int realize(){
    int out=0,temp=0,flag=0;
    for(int i=0;i<=2*n-1;i+=2){
        temp=temp*10+(a[i+1]-'0');
        if(a[i+2]==' ' && i+2<=2*n-1){
            if(flag)continue;
            if(a[i]=='+'){flag=1;continue;}
            else if(a[i]=='-'){flag=-1;continue;}
        }
        else if(a[i]=='+'){flag=1;}
        else if(a[i]=='-'){flag=-1;}
        out+=flag*temp;temp=0;flag=0;
    }
    if(!out)return 1;
    return 0;
}

  

 

===================================分割线===================================

 以及ldl的古早代码

 

#include 
#include 
#include 
#include 
#include 
#include
#include
#include
using namespace std;
char a[20]={'+'},lis[]={' ','+','-'};
int n;
inline int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int realize(){
	int f=1,ans=0,sum=0;
    for(int i=0;i<=(n<<1);i+=2){
		if(a[i]!=' ')
		{
			ans+=f*sum,sum=a[i+1]-'0';
			if(a[i]=='+')	f=1;
			else			f=-1;
		}
		else
		{
			sum=sum*10+a[i+1]-'0';
		}
	}
	if(ans==0)	return 1;
	return 0;
}
void dfs(int m)
{
    if(m==n){
		if(realize()){
	        for(int i=1;i<=2*n-1;i++)cout< 
 

  

转一个bfs模板

  https://blog.csdn.net/cj1064789374/article/details/84888889

你可能感兴趣的:(20200130还是宅在家的搜索入门训练)