洛谷——P2706 巧克力(未完成)
阿新 • • 發佈:2017-09-28
表示 mda isp 分享 code 輸出 有一個 pen names
P2706 巧克力
題目背景
王7的生日到了,他的弟弟準備送他巧克力。
題目描述
有一個被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]塊巧克力。就在送出它的前一天晚上,有老鼠夜襲巧克力盒,某些位置上被洗劫並且穿了洞。所以,你——王7的弟弟王9,必須從這個滿目蒼夷的盒子中切割出一個矩形巧克力盒,其中不能有被老鼠洗劫過的格子且使這個盒子裏的巧克力盡量多。
輸入輸出格式
輸入格式:
第一行有兩個整數 n、m。第 i+1行的第 j 個數表示a[ i , j ]。如果這個數為 0 ,則表示這個位置的格子被洗劫過。
輸出格式:
輸出最大巧克力數。
輸入輸出樣例
輸入樣例#1:3 4 1 2 3 4 5 0 6 3 10 3 4 0輸出樣例#1:
17 //10 3 4這個矩形的巧克力數最大
說明
1≤n,m≤300
0≤a[i,j]≤255
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define N 500 using namespace std;智障的33分代碼int n,m,s,x,y,a[N][N],sum[N][N],v1[N],v2[N],ans; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) ch=getchar(); while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(),m=read(); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) { a[i][j]=read(); if(!a[i][j]) v1[i]+=1,v2[j]+=1; sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]; } for(int l1=0;l1<n;l1++) for(int l2=0;l2<m;l2++) for(int i=0;i<=n-l1+1;i++) if(v1[i+l1]-v1[i]==0) for(int j=0;j<=m-l2+1;j++) if(v2[j+l2]-v2[j]==0) { x=i+l1,y=j+l2; ans=max(ans,sum[x][y]-sum[x][j]-sum[i][y]+sum[i][j]); } printf("%d",ans); return 0; }
洛谷——P2706 巧克力(未完成)