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 - 火柴棒等式的更多相关文章

  1. 用Python写算法题--洛谷P1149 火柴棒等式

    题目 题目来源 P1149 火柴棒等式,https://www.luogu.org/problem/P1149 题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式? ...

  2. [NOIP2008] 提高组 洛谷P1149 火柴棒等式

    题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...

  3. 洛谷 P1149 火柴棒等式

    嗯....   这道题好讨厌啊!!!!   一开始莫名RE,然后发现数组小了,然后发现后面几个点总是WA,原来推的少了....   并且这道题的思路真的好水啊!!   先看一下题: 题目描述 给你n根 ...

  4. 洛谷P1149 火柴棒等式

    题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1.加号与等号 ...

  5. 洛谷P1149.火柴棒等式(暴力搜索)

    题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注 ...

  6. Java实现 洛谷 P1149 火柴棒等式

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...

  7. luogu P1149 火柴棒等式

    题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...

  8. (函数)P1149 火柴棒等式

    题解: #include<stdio.h>int a[10]={6,2,5,5,4,5,6,3,7,6};int num(int n){                          ...

  9. [折腾笔记] 洛谷P1149-火柴棒等式 AC记

    原题链接: https://www.luogu.org/problem/P1149 题面简述: 给你n根火柴棍,你可以拼出多少个形如"A+B=C""A+B=C" ...

随机推荐

  1. 使用图片作为textview组件的背景

    <TextView android:layout_gravity="center" android:layout_width="100dp" androi ...

  2. jmeter - DBC Request之Query Type

    工作中遇到这样一个问题: 需要准备10W条测试数据,利用jmeter中的JDBC Request向数据库中批量插入这些数据(只要主键不重复就可以,利用函数助手中的Random将主键的ID末尾五位数随机 ...

  3. 转:VMware中三种网络连接的区别

    转自:http://www.cnblogs.com/rainman/archive/2013/05/06/3063925.html VMware中三种网络连接的区别   1.概述 2.bridged( ...

  4. Unity3d中制作异步Loading进度条所遇到的问题

    背景 通常游戏的主场景包括的资源较多,这会导致载入场景的时间较长.为了避免这个问题,能够首先载入Loading场景.然后再通过Loading场景来载入主场景. 由于Loading场景包括的资源较少,所 ...

  5. DataGuard备库ORA-01196故障恢复一则

    问题现象 在使用shutdown abort停DataGuard备库后.备库不能open,报ORA-01196错误. 详细例如以下: 发现一备库不能应用日志.查看备库日志没发现报错.怀疑是备库应用日志 ...

  6. WPF窗口最大化

    做C/S应用程序的过程中,要实现的一个功能是可以编辑系统某一类表,这些表又含有不同的properties,properties数量也不相同,有二十来个的,也有一两个的,所以,popUp出来之后大小各异 ...

  7. 基于TCP应用协议/端口

  8. ArcGIS 10.3 for Server新特性介绍

    ArcGIS10.3的正式版立即在美国Esri全球用户大会推出.中国的正式发行时间预计在Esri中国的用户大会.以下就将用户比較关心的ArcGIS 10.3 for Server的新特性给大家进行简单 ...

  9. 图像处理之 opencv 学习---矩阵的操作

    OpenCV的一些操作,如生成随机矩阵,高斯矩阵,矩阵相乘之类的 /*功能:说明矩阵的一些操作方法*/#include "cv.h"//该头文件包含了#include " ...

  10. Python 006- python socket编程详细介绍

    转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供 ...