1. 程式人生 > >洛谷——P2706 巧克力(未完成)

洛谷——P2706 巧克力(未完成)

表示 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;
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; }
智障的33分代碼

洛谷——P2706 巧克力(未完成)