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());
}

最新文章

  1. C++实现线程安全的单例模式
  2. 初探bootstarp
  3. Compactness问题
  4. cdoj 题目简单分类
  5. openerp学习笔记 跟踪状态,记录日志,发送消息
  6. java学习之常量与进制
  7. BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
  8. Chapter 2 Open Book&mdash;&mdash;25
  9. mysql 半同步复制 插件安装以及测试
  10. 使用Expression进行动态排序分页
  11. vue 里filter的基本用法
  12. (未完成...)Python3网络爬虫(2):利用urllib.urlopen向有道翻译发送数据并获得翻译结果
  13. 循环语句中,break和continue分别有什么作用?
  14. vue 打包后,后缀名为.woff等字体问题不能用解决办法
  15. 微信小程序:工具配置 project.config.json
  16. Asynchronous Programming Using Delegates使用委托进行异步编程
  17. Delphi DBGrid图显用法
  18. MVC下EF添加上下文
  19. C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
  20. linux user date

热门文章

  1. Camtasia Studio如何添加画中画
  2. Solidworks修改零件文件名之后工程图找不到零件怎么办
  3. CentOS安装Openfire服务
  4. weexapp 开发流程(三)其他页面创建
  5. 源代码方式向openssl中加入新算法完整具体步骤(演示样例:摘要算法SM3)【非engine方式】
  6. Python基础二--基本控制语句
  7. python xmlrpc
  8. Python - colour-science库
  9. @SafeVarargs 使用说明
  10. Ajax的简单实现(Json)