第一次用bfs,以前只是會用遞迴的dfs搜尋,這次對照著書,硬生生的把bfs打出來了,終於明白什麼叫做複雜度了。
先上程式(很明顯這題的bfs會很痛苦,因為第一層9個,第二層9×9,第三層9×9×9,大約到了8層的時候,無論是什麼樣的佇列,還是堆疊都不崩潰了)
很悲慘,到了第三組資料的時候完全不可能通過了,佇列溢位了。實在無法達到35億的儲存效果。希望和我一樣遇到這個問題的小白注意一下子。
#include#include#include#includeusing namespace std;
char means[10][6]= ;
int clockx[10],t[11];
int queue[3000000][11];
long long int qs=0,qe=0;
int stack[1000],sp=0;
int p;
int inthequeue(int t)
int check(int t[10])
int main()
if(inthequeue(t));
else
if(check(t))
qe++;
}if(!flag) break;
qs++;
}j=queue[qe][0];
stack[sp]=queue[qe][10];
sp++;
while(j!=0)
for(j=sp-1; j>0; j--)
cout《然後呢,難以剪枝的bfs最終還是被我放棄了,參考了一下網上各位大牛的思路。
貌似這一題是90年代ioi上的題目,還是poj上的原題,寫出解題報告的大牛真不少。
一位大牛所說,需要使用高斯消去定理(我汗。這個真不會),還有一位大牛說,需要用到線性代數裡面的矩陣(想想也是啊,可是。。線代我也不會。。),最後一位oi同學提到了可以直接列舉就可以解決問題,我也仔細一想,果然,僅僅是3^9的複雜度,每次旋轉九十度,只與次數(0.1.2.3次)有關,不和順序有關。所以我就有了這樣很娛樂的方法。。如此做來相當飄逸。。
#include#include#includeusing namespace std;
char means[10][6]= ;
int clocks[10],t[11];
int x[10];
int check(int t[10])
int main()
if(check(t))
{i=1;
while(x[i]==0) i++;
cout<
USACO1 4 解題報告
本章主要考的是貪心和一些比較麻煩的模擬。難度相比上一章有很明顯的提公升。但是稍微想一下還是可以想出來的 第五題除外,看了一下題解的思路 usaco 思路 很明顯是一道貪心基礎題。肯定是要先買每單位價錢最便宜的,然後再依次買貴的。這個不用證明了吧。id ssl zyc2 task milk lang ...
USACO 修理牛棚
同樣是一道貪心題,我的思路是用乙個陣列存下所有的空擋,對空擋進行排序,然後再在總長度中減去前m 1 大的空檔長度。關鍵還是理解題意。貌似洛谷 oj不支援 int min 之類的。還有要對初始資料排一次序,害我 wa了一次。include include includeusing namespace ...
USACO 奶牛電信
題目鏈結 洛谷1345 題目大意 給出乙個 n 個點 m條邊的無向圖,與 s,t 問至少刪去多少個點,使 s,t 不連通。n 100,m 600 分析 1.對於這種分離s,t 的題,考慮最大流 最小割的方法。2.然而題目要求割點,而不是割邊,怎麼辦?這就是一種經典的拆點題。3.把每個點 i 拆成兩個...