--- 4.cpp.new	Fri May 23 15:31:57 2008
+++ 4.cpp	Fri May 23 15:41:55 2008
@@ -9,9 +9,9 @@
 #define REP(i, b, e) for (size_t i = b; i < e; ++i)
 #define REPE(i, b, e) for (size_t i = b; i <= e; ++i)
 
-void fill(std::vector<long>& v, long value)
+void zero_fill(std::vector<long>& v)
 {
-	std::fill(v.begin(), v.end(), value);
+	std::fill(v.begin(), v.end(), 0);
 }
 
 int main()
@@ -32,11 +32,11 @@
 
 	std::vector<std::vector<long> > slip(n + 3, std::vector<long>(max_x, -1)); // -1 means there is no stone
 
-	fill(slip[0], 0); // start shore (0 is dummy value)
+	zero_fill(slip[0]); // start shore (0 is dummy value)
 
-	fill(slip[n + 1], 0); // goal shore (0 is dummy value)
+	zero_fill(slip[n + 1]); // goal shore (0 is dummy value)
 
-	fill(slip[n + 2], 0); // goal shore (0 is dummy value)
+	zero_fill(slip[n + 2]); // goal shore (0 is dummy value)
 
 	REPE(y, 1, n)
 	{
@@ -72,7 +72,7 @@
 		std::vector<std::vector<long> >(max_x,
 			std::vector<long>(m + 1, std::numeric_limits<long>::max())));
 
-	dp[0] = std::vector<std::vector<long> >(max_x, std::vector<long>(m + 1, 0));
+	std::for_each(dp.front().begin(), dp.front().end(), zero_fill);
 
 	REPE(y1, 0, n) REP(x1, 0, max_x) if (slip[y1][x1] >= 0) // source
 	{
