DFS:C 小Y的难题(1)
解题心得:
1、在明确使用DFS之后一定要找到递归函数的出口、方向,以及递归的点(在某个情况下开始递归)(void 也可以return,但是没有返回值)。递归时也要有递归的方向,最后都能够达到递归的出口。
2、在DFS递归的出口处可以用一个数组来进行记录最终的结果,双向递归可以用一个二位数组来记录结果。
3、在循环中,尽量不要多次使用一个变量(不然找错找得你哭瞎双眼。伤心。。。。。。)。
4、先找思路再写程序,写程序时小心变量是否用对,数组是否越界,变量是否初始化,特别实在循环中时。当循环出现多层的时候,检查关键的步骤是否放对循环。
5、找错找得哭瞎双眼的时候一定要反思总结啊。
Description
最近小Y迷上了数学,总是在思考各种数学问题。有一天,他不小心把墨水洒在草稿纸上。他现在能看到的是“2?3?1?4”(?表示看不清的地方)。小Y的记忆力不错,他知道:
1、每个?只会是“+”、“-”,“=”三个符号之一。
2、总共有且仅有一个“=”。
3、原式一定是一个等式。如“2+3-1=4”
现在他突然想知道,有多少种可能性,满足上面3个要求。
Input
多组输入。
每组第一行有一个数字n。表示小Y从左到右,一共可以看到n个数字。(2<=n<=15)
每组第二行有n个数字。分别表示这n个数字是什么。保证每个数字都是非负整数,且小于10^7。
Output
对于每组,输出一行,这一行只有一个数字,表示有多少种可能性满足题意。
Sample Input
Raw
4
2 3 1 4
4
1 1 1 1
Sample Output
Raw
2
6
Hint
数字间一定有且仅有一个符号,第一个数字前没有符号。
#include<stdio.h>
int a[16],i,j,jie[2][30000],k,l,n,d[2],b,z;//命名混乱
void DFS(int n,int sum)
{
if(n == k)//递归的出口
{
jie[l][d[l]++] = sum; //二维数组记录最终的结果
return ; //void也可以return 但没有值
}
DFS(n+1,sum + a[n+b]); //‘+’
DFS(n+1,sum - a[n+b]); //‘-’
}
int main()
{
int num;
while(scanf("%d",&n)!=EOF)
{
num = 0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
b = 0;
k = i;
l = 0;
d[0] = 0;
DFS(1,a[0]);
b = i;
k = n - i;
l = 1;
d[1] = 0;
DFS(1,a[i]);
for(z=0;z<d[0];z++) //不要使用i,找瞎了双眼
{
for(j=0;j<d[1];j++)
{
if(jie[0][z] == jie[1][j])
num++; //记录个数
}
}
}
printf("%d\n",num);
}
}
DFS:C 小Y的难题(1)的更多相关文章
- 小Y的难题
Font Size:Aa Aa Aa Description 近期小Y迷上了数学,总是在思考各种数学问题.有一天,他不小心把墨水洒在草稿纸上.他如今能看到的是"2?3?1?4"(? ...
- 【luoguP4006 清华集训2017】小Y和二叉树
题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- 【洛谷4005】小Y和地铁(搜索)
[洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情 ...
- P4005 小 Y 和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- [LOJ#2324]「清华集训 2017」小Y和二叉树
[LOJ#2324]「清华集训 2017」小Y和二叉树 试题描述 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙 ...
- [LOJ#2323]「清华集训 2017」小Y和地铁
[LOJ#2323]「清华集训 2017」小Y和地铁 试题描述 小Y是一个爱好旅行的OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的 ...
- nyist 604 小明的难题
http://acm.nyist.net/JudgeOnline/problem.php?pid=604 小明的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 ...
随机推荐
- ASP.NET MVC 音乐商店 - 5. 通过支架创建编辑表单
在上一章,我们已经从数据库获取数据,然后显示出来,这一章,我们将允许编辑数据. 创建 StoreManagerController 控制器 我们将要创建称为 StoreManager 的控制器,对于这 ...
- python定义class
python也是面向对象的语言,类的重要性不言而喻. class Animal: def __init__(self,voice='hello'): self.voice=voice def __de ...
- python3线程介绍01(如何启动和调用线程)
#!/usr/bin/env python# -*- coding:utf-8 -*- import osimport time,randomimport threading # 1-进程说明# 进程 ...
- 通过windows计划任务和Dos批处理备份文件
目的: 1.计划每天每半小时备份1次,每天8点开始,执行12小时,20点结束. 2.定期删除历史备份文件,由于每天有多个时间段备份,删除前只保留当天最后一个备份. 说明: 由于删除的操作只有每天第一次 ...
- Vue.js-创建Vue项目(Vue项目初始化)并不是用Webstrom创建,只是用Webstrom打开
我犯的错误:作为vue小白,并不知道还要单独去创建初始的vue项目,于是自己在webstrom中建了一个Empty Project, 在其中新增了一个js文件,就开始import Vue from “ ...
- Git基本操作(add,commit的理解)
1.创建仓库 ——创建工作目录(Working Directory):git三种副本:工作目录(Working Direcotry),暂存区域(Stage,索引(Index)),仓库(History) ...
- ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证
ABAP Netweaver 在我的博客Learn more detail about Standard logon procedure里有详细介绍. Hybris ECP Hybris Admini ...
- 问题 B: 投简历
题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...
- Spring boot 集成三种定时任务方式
三种定时任务方式分别为 org.springframework.scheduling.annotation.Scheduled java.util.concurrent.ScheduledExecut ...
- putty乱码问题
1.将linux系统编码设置为utf-8 #vi /etc/sysconfig/i18n #设置为如下内容: LANG="en_US.UTF-8" SYSFONT="la ...