Submission #412702

#TimeUsernameProblemLanguageResultExecution timeMemory
412702dolijan건포도 (IOI09_raisins)C++14
20 / 100
2 ms332 KiB
#include <bits/stdc++.h> using namespace std; const int mn=55; int a[mn][mn]; int rows[mn]; int cols[mn]; int dpr[mn][mn]; int dpc[mn][mn]; int prefr[mn]; int prefc[mn]; const int INF=1e9; int main() { int n,m; cin>>n>>m; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>a[i][j]; cols[i]+=a[i][j]; rows[j]+=a[i][j]; } } for(int i=0;i<m;i++) dpr[i][i]=0; prefr[0]=rows[0]; for(int i=1;i<m;i++) prefr[i]=prefr[i-1]+rows[i]; for(int k=1;k<m;k++) { for(int i=0;i<m;i++) { int l=i; int r=k+i; if(r>=m) continue; int sta=INF; int prefiksna=0; if(l==0) prefiksna=prefr[r]; else prefiksna=prefr[r]-prefr[l-1]; for(int j=l;j<=r-1;j++) { sta=min(sta,dpr[l][j]+dpr[j+1][r]+prefiksna); } dpr[l][r]=sta; } } for(int i=0;i<n;i++) dpc[i][i]=0; prefc[0]=cols[0]; for(int i=1;i<n;i++) prefc[i]=prefc[i-1]+cols[i]; for(int k=1;k<n;k++) { for(int i=0;i<n;i++) { int l=i; int r=k+i; if(r>=n) continue; int sta=INF; int prefiksna=0; if(l==0) prefiksna=prefc[r]; else prefiksna=prefc[r]-prefc[l-1]; for(int j=l;j<=r-1;j++) { sta=min(sta,dpc[l][j]+dpc[j+1][r]+prefiksna); } dpc[l][r]=sta; } } //cout<<dpr[0][1]<<endl; //cout<<dpr[0][m-1]<<endl; cout<<dpr[0][m-1]+dpc[0][n-1]<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...