大神做了這道題:解釋得非常清楚,我也是按照這種方法做的,即統計「必經點」的個數,如果為0,則周圍點都要試一遍;否則,如果為1,則選擇這個必經點走;如果多餘1個,則無論選擇其中哪個,都會走向死胡同,所以不用再走了。只用這乙個優化就可以通過所有測試點,雖然很險。
user: chen chen [thestor1]網上和標準答案都是用的這個優化,只不過實現地更有效些,即用乙個陣列儲存每個點周圍的沒有訪問過的點的個數,並實時更新,這樣不必每步都重新計算。task: betsy
lang: c++
compiling...
compile: ok
executing...
test 1: test ok [0.003 secs, 3500 kb]
test 2: test ok [0.005 secs, 3500 kb]
test 3: test ok [0.005 secs, 3500 kb]
test 4: test ok [0.003 secs, 3500 kb]
test 5: test ok [0.003 secs, 3500 kb]
test 6: test ok [0.011 secs, 3500 kb]
test 7: test ok [0.969 secs, 3500 kb]
all tests ok.
your program ('betsy') produced all correct answers! this is your
submission #2 for this problem.congratulations!
大神提到了另外乙個優化,就是對那種「一分為二」的情況直接跳出。但我總覺得有點困惑,覺得需要判斷整行或整列的情況才能得到,所以沒有使用(當然,主要是測試點都過了)。
/*
id: thestor1
lang: c++
task: betsy
*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int dx = , dy = ;
// 88418
int cntfree(int r, int c, int n, std::vector> &visited)
nfree++;
} return nfree;
}void dfs(int r, int c, int n, std::vector> &visited, int &cnt, int nvisited)
return;
} visited[r][c] = true;
int nr, nc;
int naccesspoint = 0, accessr, accessc;
for (int d = 0; d < 4; ++d)
int nfree = cntfree(nr, nc, n, visited);
if (nfree == 1)
}// if more than 1 access points, then there will be dead end
if (naccesspoint == 0)
dfs(nr, nc, n, visited, cnt, nvisited + 1);
} }else if (naccesspoint == 1)
visited[r][c] = false;
}int main()
USACO Hamming Codes 解題報告
資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...
USACO Closed Fences 解題報告
幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...
Wiggle Subsequence解題報告
這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...