250 条题解
-
0qyjubriskxp LV 10 @ 2009-10-07 10:52:12
一次AC!!!
-
02009-10-06 16:06:55@
#include
int u[1000][1000],m[1000][1000];
sunpig(int a,int b)
{
if(a -
02009-10-06 11:16:38@
简单DP,不过要看清楚每个点可以从哪个点来.
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar
i, j, n, tx, ty : longint;
a : array[1 .. 1000, 1 .. 1000] of longint;
v : array[1 .. 1000, 1 .. 1000] of longint;function min(a, b : longint) : longint;
begin
if a = 0 then exit(b);
if a < b then exit(a) else exit(b);
end;begin
fillchar(a, sizeof(a), 0);
readln(n);
for i := 1 to n do for j := 1 to i do read(a[i][j]);
v[n][1] := a[n][1];
for i := n downto 1 do
begin
if i < n then
begin
tx := i + 1;
for j := 1 to i do
begin
ty := j + 1;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
ty := j;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
if j = 1 then
begin
ty := i + 1;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
end;
if j = i then
begin
ty := 1;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
end;
end; end;
tx := i;
for j := 1 to i do
begin
ty := j - 1;
if ty = 0 then ty := i;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
end;
for j := i downto 1 do
begin
ty := j + 1;
if ty > i then ty := 1;
v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);
end;
end;
writeln(v[1][1]);
end. -
02009-10-03 20:39:22@
从左下角出发!
-
02009-10-01 23:39:26@
..SPFA就行了。
建图太囧了。看了半天才看懂到底哪些能走哪些不能走。。。 -
02009-09-17 07:46:14@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms一测得了90分,死在第7个点上,无语到无与伦比的境界....
看了大牛的数据才知道: 战胜自己的心魔我才能更强大!
这个点我想到了呀!可是打的时候漏掉了.... -
02009-09-14 19:20:43@
出题的人的描述需要更准确点...否则不看题解不可能做的出来...
-
02009-09-16 19:20:36@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms类似于 小胖办证
分层的去DP。。
左右扫2遍。。头尾特殊情况特殊处理。
一直推到顶即可。。
(无语。。我一直错一直错。。。后来才发现。。。
有处F打成了F。。。晕。。。
静态查错是很重要的。。。。。。。) -
02009-09-05 18:43:25@
var
i,j,n:longint;
a,f:array[1..1000,1..1000]of longint;
begin
read(n);
for i:=1 to n do
for j:=1 to n do
read(a);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=0 to n do
begin
f:=f;
if (j>=1) and (f+a>f) then
f:=f+a[i];
end;
writeln(f[n,n]);
end. -
02009-09-05 15:32:20@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms刷了三次,居然忘了多输出了!!!
-
02009-09-04 19:52:23@
var n,i,j,k:integer;
a,f:array[0..1001,0..1001] of longint;
flag:boolean;function min(x,y:longint):longint;
begin
if x>y then min:=y
else min:=x;
end;begin
readln(n);
for i:=1 to n do
for j:=1 to i do
read(a);for i:=2 to n do a:=a;
f[n,1]:=a[n,1];
for i:=2 to n do f[n,i]:=f[n,i-1]+a[n,i];
f[n,n]:=min(f[n,n],a[n,n]+f[n,1]);
for i:=n-1 downto 1 do f[n,i]:=min(f[n,i],a[n,i]+f[n,i+1]);for i:=n-1 downto 1 do
begin
for j:=1 to i do f:=a+min(f,f);
f:=min(f,a+f);
f:=min(f,a+f);
f:=f;f:=f;
for k:=1 to i do
begin
flag:=true;
for j:=1 to i do
if min(f,f)+a -
02009-09-01 21:29:27@
终于AC了,555555555~~~~~~~~~~~~
这题方程真的好想,但做起来很烦………………- -!
我被绕进去了,这题不光考DP,还有耐心和语文水平…………
Orz myself,我居然忘了是从左下角开始了,白交了一次 -
02009-08-31 17:07:27@
原来看题解看得都没信心写了。。
写完一次ac真高兴膜拜某数据
细心很重要 -
02009-08-29 09:40:56@
无限鄙视出题人......
-
02009-08-27 17:26:36@
program p1006;
var
f,min1,min2:array[0..1001] of longint;
a:array[0..1001,0..1001] of integer;
i,j,n,mm:integer;
function min(a,b:longint):longint;
begin
if a>b then a:=b;
min:=a;
end;
begin
read(n);
read(a[1,1]);
for i:=0 to n do f[i]:=10000;
f[1]:=a[1,1];
for i:=2 to n do
begin
f[0]:=f;
for j:=1 to i do read(a);
f[i]:=min(f,f[1])+a;
for j:=i-1 downto 1 do f[j]:=min(f[j],f[j-1])+a;
mm:=1;
for j:=1 to i do if f[j] -
02009-08-26 16:59:12@
#include
#define MIN(x,y) (x>y)?y:x
#define DP_N 2
using namespace std;
int n,a[1001][1001],b[1001][1001],minNum,minI;
int main()
{
int i,j,k;
cin>>n;
for(i=1;ia[i][j];
b[i][j]=a[i][j];
}
for(i=2;i -
02009-08-21 18:28:22@
BS死出题人了
什么意思。。。。。
???
挂了一下午... -
02009-08-20 09:55:00@
同一层,左扫右扫要从最小值开始。
其实可以用扫两遍来解决 -
02009-08-19 12:05:22@
题目所说的走法很不清楚,甚至有的是错的。
本人经过多次参考,终于总结出了较为完整、准确的走法:
可走的方向是左、右、左上、正上方(而不是右上)。
每一层第1段可以到本层、上一层、下一层的最后一段。
每一层最后一段可以到本层、上一层、下一层的第1段。
对于每一层第1段可以到本层的最后一段,每一层最后一段可以到本层的第1段,可以正反搜一遍。
f[i][1] = min(f[i][1],f[i][i]+map[i][1]);
for(k=2;k0;k--) {
f[i][k] = min(f[i][k],f[i][k+1]+map[i][k]);
} -
02009-08-18 10:40:46@
世界上这种题目多了..我的AC率就没办法上去.- -
注意特判
f:=min(f,f,f)+a;
f:=min(f,f,f)+a;