Pagini recente » Cod sursa (job #3132919) | Cod sursa (job #34863) | Cod sursa (job #2910396) | Cod sursa (job #2291265) | Cod sursa (job #639425)
Cod sursa(job #639425)
#include <fstream>
using namespace std;
ifstream fin("ferma2.in");
ofstream fout("ferma2.out");
int N , K , p[301][301][301] , s[3][501][501] , ans , val;
static inline int max(int a,int b)
{
return a > b ? a : b;
}
int memo(int i,int j,int n)
{
int c1 , c2 , c3 ;
if(N-n==K) return 0;
if(p[N-n][i][j]!=0) return p[N-n][i][j];
c1 = s[0][i+n-1][j+n-1] - s[0][i+n-1][j-1];
c2 = s[1][i+n-1][j] - s[1][i-1][j];
c3 = s[2][i+n-1][j+n-1] - s[2][i-1][j-1];
return p[N-n][i][j] = max(max(memo(i+1,j+1,n-1) + c2,memo(i,j,n-1) + c1),memo(i+1,j,n-1) + c3);
}
int main()
{
fin>>N>>K;
if(N<=500 && K<=300)
{
for(int i=1;i<=N;++i)
for(int j=1;j<=i;++j)
{
fin>>val;
s[0][i][j] = s[0][i][j-1] + val;
s[1][i][j] = s[1][i-1][j] + val;
s[2][i][j] = s[2][i-1][j-1] + val;
}
fout<<memo(1,1,N)<<'\n';
}
else
fout<< 100000;
return 0;
}