(水题)洛谷 - P1149 - 火柴棒等式
https://www.luogu.org/problemnew/show/P1149
一开始还分类重复了。在非0的dfs中居然赋值了0,脑残得一笔。
其实就按 $lead0$ 分类就好了, $lead0$ 表示当前位有没有被赋值过,只有没被赋值过的赋值前导0才会立刻进入下一个数字。
#include<bits/stdc++.h>
using namespace std;
#define ll long long int cost[]={,,,,,,,,,}; int cnt=; set<pair<pair<ll,ll>,ll> >s; void dfs(int i,int n,ll a,ll b,ll c,int lead0){
if(n<)
return;
//cout<<"i="<<i<<" "<<a<<" + "<<b<<" = "<<c<<" restn= "<<n <<endl;
//lead0=1,表示这个数可以取前导0,也就是这个数还没有被赋值
if(i==){
if(lead0){
if(n-cost[]>=)
dfs(,n-cost[],,b,c,);
//给a赋值0,那么a就不能搜索了
for(int i=;i<=;i++){
//这个bug服气了,非零居然从0开始
if(n-cost[i]>=){
dfs(,n-cost[i],i,b,c,);
//给a赋值非0
}
}
}
else{
//a已经被赋值过非0了 //停止搜索a,考虑b,b没被赋值
dfs(,n,a,b,c,); for(int i=;i<=;i++){
if(n-cost[i]>=){
dfs(,n-cost[i],a*+i,b,c,);
//继续给a加后缀
}
}
}
}
else if(i==){
if(lead0){
//进不来这里,改了之后就可以进来了
dfs(,n-cost[],a,,c,);
//给b赋值0,那么b就不能搜索了
for(int i=;i<=;i++){
if(n-cost[i]>=){
dfs(,n-cost[i],a,i,c,);
//给b赋值非0
}
}
}
else{
//b已经被赋值过非0了 //停止搜索b,考虑c
dfs(,n,a,b,c,); for(int i=;i<=;i++){
if(n-cost[i]>=){
dfs(,n-cost[i],a,b*+i,c,);
//继续给b加后缀
}
}
}
}
else if(i==){
if(lead0){
//进不来这里?
dfs(,n-cost[],a,b,,);
//给c赋值0,那么c就不能搜索了
for(int i=;i<=;i++){
if(n-cost[i]>=){
dfs(,n-cost[i],a,b,i,);
//给c赋值非0
}
}
}
else{
//停止搜索c
dfs(,n,a,b,c,);
//c已经被赋值过非0了
for(int i=;i<=;i++){
if(n-cost[i]>=){
dfs(,n-cost[i],a,b,c*+i,);
//继续给c加后缀
}
}
}
}
else{
if(n==&&(a+b==c)){
s.insert({{a,b},c});
cnt++;
}
return;
}
} int main(){
int n;
scanf("%d",&n);
n-=;
dfs(,n,-,-,-,);
printf("%d\n",s.size());
}
(水题)洛谷 - P1149 - 火柴棒等式的更多相关文章
- 用Python写算法题--洛谷P1149 火柴棒等式
题目 题目来源 P1149 火柴棒等式,https://www.luogu.org/problem/P1149 题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式? ...
- [NOIP2008] 提高组 洛谷P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- 洛谷 P1149 火柴棒等式
嗯.... 这道题好讨厌啊!!!! 一开始莫名RE,然后发现数组小了,然后发现后面几个点总是WA,原来推的少了.... 并且这道题的思路真的好水啊!! 先看一下题: 题目描述 给你n根 ...
- 洛谷P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1.加号与等号 ...
- 洛谷P1149.火柴棒等式(暴力搜索)
题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注 ...
- Java实现 洛谷 P1149 火柴棒等式
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...
- luogu P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- (函数)P1149 火柴棒等式
题解: #include<stdio.h>int a[10]={6,2,5,5,4,5,6,3,7,6};int num(int n){ ...
- [折腾笔记] 洛谷P1149-火柴棒等式 AC记
原题链接: https://www.luogu.org/problem/P1149 题面简述: 给你n根火柴棍,你可以拼出多少个形如"A+B=C""A+B=C" ...
随机推荐
- [Adobe Analytics] Segments types
There are three types of Segmentation Hit-based Visit-based Visitor-based There are four segment con ...
- 一个能自己主动搜索源文件并自己主动推导的Makefile
今天看了一天的makefile的写法.东拼西凑.好不easy写出了一个makefile.颇有成就感,记录下来,以备温习之用. 如果有两个头文件文件夹 header1,header2;两个cpp文件文件 ...
- 【C语言天天练(九)】动态内存分配
引言:数组的元素存储于内存中连续的位置上.当一个数组被声明时.它所须要的内存在编译时就被分配. 可是,我们能够使用动态内存分配在执行时为它分配内存. 一块内存的生命周期能够分为四个阶段:分配.初始化. ...
- 代码调试过程中easy遇到的问题
前两天身体有些不舒服,也没写啥新文章,昨天下了一天的雨.今天阳光明媚,空气也非常新奇.心情大好. 继翻译为什么输出是String而不是Object,今天先写一下调试方面的东西.java中自带的函数调试 ...
- 李洪强iOS开发之-实现点击单行View显示和隐藏Cell
李洪强iOS开发之-实现点击单行View显示和隐藏Cell 实现的效果: .... ....
- hdu 4858 项目管理(vector模拟)
# include <stdio.h> # include <algorithm> # include <string.h> # include <vecto ...
- Spring Boot JPA 连接数据库
本文将介绍怎样在Spring Boot project中加入JPA作为持久化方式. 改动 pom.xml 依赖 与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 改 ...
- VUE 之 生命周期
1. Vue实例的生命周期分为8个周期 1.1 beforeCreate:在实例创建前 <div id="app"> {{ name }} <button @cl ...
- Safair css hack
一下方式不会影响chrome浏览器样式 _::-webkit-full-page-media, _:future, :root .class{ /*此处放css样式*/ }
- ubuntu16.04和服务器 caffe 安装
在centos6.X上安装caffe 0.编译安装gcc4.8.5 由于centos6.x中的gcc版本老旧,不支持c++11所以要安装gcc4.8.5,以下是安装教程.参考CentOS 6.4 编译 ...