日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取)

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題干:

給定一個(gè)NxM的矩陣A和一個(gè)整數(shù)K,小Hi希望你能求出其中最大(元素?cái)?shù)目最多)的子矩陣,并且該子矩陣中所有元素的和不超過(guò)K。

Input

第一行包含三個(gè)整數(shù)N、M和K。

以下N行每行包含M個(gè)整數(shù),表示A。

對(duì)于40%的數(shù)據(jù),1 <= N, M <= 10 ?

對(duì)于100%的數(shù)據(jù),1 <= N, M <= 250 1 <= K <= 2147483647 1 <= Aij?<= 10000

Output

滿足條件最大的子矩陣所包含的元素?cái)?shù)目。如果沒(méi)有子矩陣滿足條件,輸出-1。

Sample Input

3 3 9 1 2 3 2 3 4 3 4 5

Sample Output

4

解題報(bào)告:

先預(yù)處理一個(gè)前綴和,然后枚舉每?jī)尚?#xff0c;然后行內(nèi)尺取就行了,總復(fù)雜度N^3,??梢猿呷〉那疤崾窃囟际钦龜?shù)。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; int n,m,k; ll a[255][255],sum[255][255]; int main() {cin>>n>>m>>k;for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {scanf("%lld",&a[i][j]);}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {sum[i][j] = a[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1]; }}int ans = -1;for(int i = 1; i<=n; i++) {for(int j = i; j<=n; j++) {int l = 1,r = 1;ll tmp = 0;while(r <= m) {tmp += sum[j][r] - sum[j][r-1] - sum[i-1][r] + sum[i-1][r-1];while(l<=r && tmp > k) {tmp -= sum[j][l] - sum[j][l-1] - sum[i-1][l] + sum[i-1][l-1];l++;}if(tmp <= k)ans = max(ans,(j-i+1)*(r-l+1)); r++;}}}if(ans <= 0) printf("-1\n");else printf("%d\n",ans);return 0 ; }

?

總結(jié)

以上是生活随笔為你收集整理的【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。