聽說有大佬覺得我發題面出來在湊字數,那就不發了吧
符號三角形
看到題目,爆搜,不用想太多,先來試一試。(寫的很 醜 麻煩,後面的**會慢慢變簡潔,大佬勿噴)
#include
#define zong n * (n + 1) / 4
const
int maxn =
105;
int n;
int ans[maxn]
;//ans[i]記錄當n = i時的答案
int sum0, sum1;
//分別記錄0(-)的個數,1(+)的個數
bool map[maxn]
[maxn]
;void
dfs(
int,
int)
;//填充
intmain()
}return0;
}void
dfs(
int x,
int y)
if(x ==1)
else
}else
else
}else
else}}
return
;}
如果你是這樣交的,你會得到郭老師給你的獎勵— time limit exceeded
恭喜恭喜
肯定是要剪枝的,我們再想一想剪枝的方法,注意「所含」+「 和」-「 的個數相同」這句話十分重要。
if
(n *
(n +1)
/2%2
==1)printf
("0\n"
);
//sum0表示0(-)的個數,sum1同理
if(sum0 > zong)
return;if
(sum1 > zong)
return
;
#include
#define zong n * (n + 1) / 4
const
int maxn =
105;
int n;
int ans[maxn]
;//ans[i]記錄當n = i時的答案
int sum0, sum1;
//分別記錄0(-)的個數,1(+)的個數
bool map[maxn]
[maxn]
;void
dfs(
int,
int)
;//填充
intmain()
}}return0;
}void
dfs(
int x,
int y)
if(sum0 > zong)
return
;//剪枝
if(sum1 > zong)
return
;//剪枝
if(x ==1)
else
}else
else
}else
else}}
return
;}
這樣提交你會發現:你還是得到了郭老師的獎勵,這是為什麼呢?我也不知道,網上查了查,函式呼叫時會耗時的,而這個**函式呼叫次數過多,就容易超時(不知道還有沒有其他原因,等待大佬的支援qaq)。
最開始我不知道什麼原因導致超時,就請求ljs大佬的支援,大佬就給出了乙個不一樣的解法,從下往上搜尋,列舉第一列的所有情況(其實和之前的方法是大同小異的,而函式呼叫次數會少很多,這樣就會節約時間呢qwq)。
同樣的,剪枝還是可以用,也是同樣的方法。
#include
#define zong n * (n + 1) / 2
const
int maxn =
105;
int n;
int ans[maxn]
;//ans[i]記錄當n = i時的答案
int sum;
//記錄1(+)的個數
bool map[maxn]
[maxn]
;void
dfs(
int)
;//填充
intmain()
}}return0;
}void
dfs(
int x)
for(
int i =
0; i <=
1; i++
)else
map[x]
[j]=0;
}// for(int j = 1; j <= x; j++)
// printf("\n");
// printf("%d\n", sum);
// printf("\n\n\n");
dfs(x +1)
;//繼續填
sum -
= i;
for(
int j =
2; j <= x; j++)}
}return
;}
給出解法後,ljs大佬就提醒我可以用位運算,既可以加快速度,還可以讓**簡化,並吐槽了我的**寫的很難看 我也這樣想呢 符號三角形問題
符號三角形問題 右圖所示的三角形中,有14個 和14個 2個同號下面是 兩個異號下面是 在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 相同。解 首先要求產生的 與 的數量一樣多,所以當給定的n不能滿足 n 1 n 4 0的...
符號三角形(dfs)
問題描述 如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。解題思路 1 不斷改變第一行每個符號,搜尋符合條件的解,可以使用遞迴回溯 ...
符號三角形問題
如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 1 2 3 4 5 6 7 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋 回...