12 28学习总结dfs广搜

思路:枚举水坑搜索起点(符合标准的为W且没有被搜索过)找到合法起点进行广搜,广搜几次就有几个水坑(sum=0;),bool函数flase or ture.最后输出sum即可。接下来就是写广搜的程序,

1.先输入所有W和.

2.定义一个起点,把起点标记为已搜索过ture.只要不超过全网格的范围进行下一步,循环广搜,关于W周围八个点的坐标与W的关系,定义一个数组来计算周围各点的坐标.(d[8][2]).  拓展点坐标出来之后,下一步判断这些点是否满足条件(是否出界,是否为W,是否为搜索过的点,什么时候结束),

二.最大子段和.

动态规划,如果加上下一个元素值比不加当前元素值还小,就和当前的最大值进行比较,然后从下一元素进行新的动态规划,

以下代码还有错误;不能过;

#include<stdio.h>
#include<string.h>
#include<math.h>

int main(){
	int n;
	int a[1000];
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d",&a[i]);}
    int sum=0;
	int ans=-1e9;
	for(int i=1;i<n;i++){
	    sum=(sum+a[i]>a[i])?sum+a[i]:a[i];
		if(sum>ans) ans=sum;
    }
	printf("%d",ans);
	
	return 0;
}

三.

题目描述

给定一个递推式a[i]=a[i-1]/2(i>1,向下取整),并且给定a[1],要求你按照从小到大的顺序输出所有的a[i](a[i]!=0)

思路:利用递归函数的思想,简单的逆序输出;

#include<stdio.h>
int fanxu(long long int x){
	if(x==0)
	return 0;
	else  {
	fanxu(x/2);
	}
	
	printf("%lld ",x);
	
}
int main(){
	long long int a,p;
	while(~scanf("%lld",&a)){
		
		fanxu(a);
		printf("\n");
		
	}
}

 四.

题目描述

给定一组整数 l 和 r,(1 <= l <= r <= 100000), 再给定一个整数 t (0 <= t <= 9),求 [l, r] 之间的数的十进制表示中会出现多少个 t。

思路:暴力解决

#include<stdio.h>
int main(){
	int l,r,t,ans=0,m,n;
	scanf("%d %d %d",&l,&r,&t);
	for(int h=l;h<=r;h++){
		m=h;
		if(h<10){
			if(h==t){
				
				ans++;
			}
		}
		else{
			if(m>=10&&m<100){
				n=1;
			}
			if(m>=100&&m<1000){
				n=2;
			}
			if(m>=1000&&m<10000){
				n=3;
			}
			if(m>=10000&&m<100000){
				n=4;
			}
			if(m==100000){
				n=5;
			}
			for(int j=0;j<=n;j++){
				if(t==m%10){
					ans++;}
					m=m/10;
				
			}
		}
		
	}
	printf("%d",ans);
	return 0;
	
}

 五.

题目描述

给定一个长度为n的序列a,并且序列a中的元素只由1或0构成
你可以执行一种操作,选定序列a中的一个元素a[i],使得a[i]=1-a[i]
最后你可以得到一个x和一个y
    x:序列a中连续1的最长序列长度
    y:操作次数
要求你求出最大的x-y

思路:找到规律即可;

#include<stdio.h>
int main(){
	int t,n;
	int a[100000];
	scanf("%d",&t);
	for(int i=0;i<t;i++){
		scanf("%d",&n);
		for(int j=0;j<n;j++){
			scanf("%d",&a[j]);
		}
		int ans=0;
		for(int j=0;j<n;j++){
			if(a[j]==0){
				ans++;
			}
		}
		printf("%d\n",n-ans);
	}
	return 0;
	
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值