-4 1 -1 8
其和为15 3 3 -2 10 20 -1 100 -2 0 -2 -3
最大子矩阵和为128 4 4 0 -2 -9 -9 -9 11 5 7 -4 -3 -7 -6 -1 7 7 5
最大子矩阵和为26 #include
int matrix[SIZE + 1][SIZE + 1];
int rowsum[SIZE + 1][SIZE + 1]; //rowsum[i][j]记录第i行前j个数的和 int m, n, i, j, first, last, area, ans; int main() {
cin >> m >> n;
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++)
cin >> matrix[i][j];
ans = matrix ① ; for(i = 1; i <= m; i ++) ② for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++) rowsum[i][j] = ③ ; for(first = 1; first <= n; first++)
for(last = first; last <= n; last++) { ④ ; for(i = 1; i <= m; i++)
{
area += ⑤ ;
if(area > ans)
ans = area; if(area < 0) area = 0;
}
}
cout << ans << endl; return 0; }
第二十届全国青少年信息学奥林匹克联赛初赛
普及组参考答案
一、单项选择题(共20题,每题1.5分,共计30分)
1 B 11 D
2 D 12 C 3 D 13 C 4 D 14 C 5 C 15 B 6 B 16 A 7 A 17 C 8 A 18 B 9 B 19 B 10 B 20 C 二、问题求解(共2题,每题5分,共计10分;每题全部答对得5分,没有部分分) 1.
18
2. 11
三、阅读程序写结果(共4题,每题8分,共计32分) 1. 2. 3. 4.
Ans=9 -11
HELLO,MYNAMEISLOSTMONKEY. 10
四、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCFNOI科学委员会复核)
1. (1) (2) (3) (4) 2. (1) (2) (3) (4)
Pascal语言 or j:=j+1或inc(j) j s[i] [1,1] rowsum[i,0]:=0 rowsum[i,j-1]+matrix[i,j] area:=0 C++语言 || j++或j=j+1或++j C语言 分值 3 3 3 3 [1][1] rowsum[i][0]=0 rowsum[i][j-1]+matrix[i][j] area=0 rowsum[i][last]-rowsum[i][first-1] 3 3 3 3 4 (5) rowsum[i,last]-rowsum[i,first-1]