제출 #1219278

#제출 시각아이디문제언어결과실행 시간메모리
1219278edga1건포도 (IOI09_raisins)C++20
100 / 100
451 ms30216 KiB
#include <bits/stdc++.h> using namespace std; #define FIO ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define ll long long #define pb push_back #define fi first #define se second const int N = 55; const ll MOD = 1e9 + 7; const ll INF = 1e9; int r[N][N]; int dp[N][N][N][N]; int cut(int x1, int y1, int x2, int y2){ if(x1==x2 && y1==y2) return 0; if(dp[x1][y1][x2][y2]!=-1) return dp[x1][y1][x2][y2]; int b=INF; for(int i=x1; i<x2; i++){ b=min(b,cut(x1,y1,i,y2)+cut(i+1,y1,x2,y2)); } for(int i=y1; i<y2; i++){ b=min(b,cut(x1,y1,x2,i)+cut(x1,i+1,x2,y2)); } dp[x1][y1][x2][y2]=b+r[x2][y2]+r[x1-1][y1-1]-r[x2][y1-1]-r[x1-1][y2]; return dp[x1][y1][x2][y2]; } int main(){ FIO; int n,m; cin>>n>>m; for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ cin>>r[i][j]; r[i][j]+=r[i-1][j]+r[i][j-1]-r[i-1][j-1]; } } for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ for(int i2=1; i2<=n; i2++){ for(int j2=1; j2<=m; j2++){ dp[i][j][i2][j2]=-1; } } } } cout<<cut(1,1,n,m); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...