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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【暴力】心中报情(jzoj 2317)

發(fā)布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【暴力】心中报情(jzoj 2317) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

心中報情

jzoj 2317

題目大意:

在一個n*m矩陣中,有k個選定的子矩陣,每個矩陣有一個代價,現(xiàn)在讓你選兩個子矩陣(有相交的),使他們覆蓋的元素之和減去他兩的代價最大(重復的只算一次)

輸入樣例#1:

3 3 3 2 1 -1 -1 0 1 1 -2 1 2 1 3 2 -1 1 1 3 3 2 1 1 1 1 0

輸出樣例#1:

1

輸入樣例#2:

1 2 2 0 0 1 1 1 1 0 1 2 1 2 0

輸出樣例#2:

F

解題思路:

直接暴力枚舉所有子矩陣即可

代碼:

#include<cstdio> #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) using namespace std; long long n,m,k,x0,x1,y0,y1,s1,s2,s3,ans,c[1500],x[5][1500],y[5][1500],f[1500][1500]; int read() {char x=getchar();long long d=1,o=0;while (x<'0'||x>'9') {if (x=='-') d=-1;x=getchar();}while (x>='0'&&x<='9') o=(o<<3)+(o<<1)+x-48,x=getchar();return d*o; } int main() {ans=-1152921504606846976;n=read();m=read();k=read();for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+read();for (int i=1;i<=k;++i)x[0][i]=read(),y[0][i]=read(),x[1][i]=read(),y[1][i]=read(),c[i]=read();for (int i=1;i<=k;++i)for (int j=i+1;j<=k;++j){x0=max(x[0][i],x[0][j]);//求相交部分x1=min(x[1][i],x[1][j]);y0=max(y[0][i],y[0][j]);y1=min(y[1][i],y[1][j]);if (x0<=x1&&y0<=y1)//判斷是否相交{s1=f[x[1][i]][y[1][i]]-f[x[0][i]-1][y[1][i]]-f[x[1][i]][y[0][i]-1]+f[x[0][i]-1][y[0][i]-1];//第一個矩陣s2=f[x[1][j]][y[1][j]]-f[x[0][j]-1][y[1][j]]-f[x[1][j]][y[0][j]-1]+f[x[0][j]-1][y[0][j]-1];//第二個矩陣s3=f[x1][y1]-f[x0-1][y1]-f[x1][y0-1]+f[x0-1][y0-1];//相交部分ans=max(ans,s1+s2-s3-c[i]-c[j]);}}if (ans==-1152921504606846976) printf("F");else printf("%lld",ans);return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的【暴力】心中报情(jzoj 2317)的全部內容,希望文章能夠幫你解決所遇到的問題。

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