1月10日学习总结

今天是学习搜索的第二天,我学到了更多搜索的应用。也对搜索有了更深的认识。搜索的本质还是一种遍历,只不过它是一种有规则而且这个规由你自己来设定的。

比如说下面这个题目。

1月10日学习总结_第1张图片

 这个题目本来有很多方法都可以解决,但是既然最近我在学习搜索,我就使用了搜索来解决这道问题。还有一个原因,就是这个题目的数据给的比较小。所以我可以用暴力搜索来解决。核心的算法就是,每一科都作为一个数据。不断的计算所有将数据分为左右两部分的可能。然后把每一种可能都进行比较。选出其中更小的一种。代码如下。

#include 
#include
using namespace std;
int l,r,min0,time1=0;
int s[5]={0};
int a[5][21]={0};
void dfs(int x,int y){
    if(y>s[x])
	{
        min0=min(min0,max(l,r));
        return;
    }
    l+=a[x][y];
    dfs(x,y+1);
    l-=a[x][y];
    r+=a[x][y];
    dfs(x,y+1);
    r-=a[x][y];
}
int main()
{
	int i,j;
     for(i=1;i<5;i++){
	 	scanf("%d",&s[i]);
	 }
    for(i=1;i<=4;i++)
	{
		min0=10000;
        l=0;
		r=0;
        for(j=1;j<=s[i];j++)
        {
             scanf("%d",&a[i][j]);
        }
        dfs(i,1);
        time1+=min0;
    }
    printf("%d\n",time1);
}

上述代码中关于回溯的部分就是一遍遍寻找所有可能。而设置的y>S[x],就是截止的条件。以防止这个递归变成死循环。而里面的min 函数就是用来判断每一次可能中最小的那一个。以此来暴力搜索。

总而言之,越学习递归。越感觉递归的功能是多么的强大。也觉得算法是真的很有趣。很佩服当初发明这些算法的人。希望自己后面能学到更多,更有意识,更加巧妙的算法。今天学习的其他题目。大体都是这些搜索类型。也就没有必要。全部列出来了。

你可能感兴趣的:(蓝桥杯,c语言,职场和发展)