取数字问题
来源:互联网 发布:中国知网数据库 编辑:程序博客网 时间:2024/05/18 01:13
取数字问题
时间限制: 1 Sec 内存限制: 128 MB
题目描述
给定M*N的矩阵,其中的每个元素都是-10到10之间的整数。你的任务是从左上角(1,1)走到右下角(M,N),每一步只能向右或向下,并且不能走出矩阵的范围。你所经过的方格里面的数字都必须被选取,请找出一条最合适的道路,使得在路上被选取的数字之和是尽可能小的正整数。
输入
第一行两个整数M,N,(2<=M,N<=10),分别表示矩阵的行和列的数目。
接下来的M行,每行包括N个整数,就是矩阵中的每一行的N个元素。
输出
仅一行一个整数,表示所选道路上数字之和所能达到的最小的正整数。如果不能达到任何正整数就输出-1。
样例输入
2 2
0 2
1 0
样例输出
1
题解
- dp[i,j,k]:花费k是否能到达点[i,j],是则dp[i,j,k]=1否则dp[i,j,k]=0
- 正整数是从1开始找,从0开始WA了好几次QAQ
var x:array[0..20,0..20]of longint; dp:array[0..10,0..10,-1000..1000]of longint; n,m,i,j,k,v:longint;function min(a,b:longint):longint;begin if a>b then exit(b) else exit(a);end;begin readln(m,n); for i:=1 to m do begin for j:=1 to n do read(x[i,j]); readln; end; dp[1,1,x[1,1]]:=1; for j:=2 to n do for k:=-1000 to 1000 do if dp[1,j-1,k]=1 then dp[1,j,k+x[1,j]]:=1; for i:=2 to m do for k:=-1000 to 1000 do if dp[i-1,1,k]=1 then dp[i,1,k+x[i,1]]:=1; for i:=2 to m do for j:=2 to n do for k:=-1000 to 1000 do begin if dp[i-1,j,k]=1 then dp[i,j,k+x[i,j]]:=1; if dp[i,j-1,k]=1 then dp[i,j,k+x[i,j]]:=1; end; v:=0; for k:=1 to 1000 do if dp[m,n,k]=1 then begin writeln(k); v:=1; break; end; if v=0 then writeln(-1);end.
0 0
- 取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- SDUT1034取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- sdutacm-取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- [DP]取数字问题
- 取数字问题
- 取数字问题
- 取数字问题
- Yii2学习笔记(七):Pjax的使用
- JasperReports
- 注册与回调
- 把iOS APP上传到DiaWi
- C语言计算数组的元素和(帮助理解指针)
- 取数字问题
- linux下uart应用编程
- AFN的使用
- Unity 自动寻路Navmesh之高级主题
- Php基础文件操作
- hdu 1171 Big Event in HDU
- Bestcoders
- CM3 STM32F的低功耗
- jQuery插件开发的五种形态小结