#include <iostream>
using namespace std;
long ileStosow;
long ileNalesnikow;
long ileZjem;
long wielkoscRazem[300000];
long wielkoscAktStosu[300000];
void czyscAktStos()
{
for(long i=0; i<300000; i++)
wielkoscAktStosu[i] = 0;
}
void stworzWielkoscRazem()
{
for(long i=0; i<ileNalesnikow; i++)
wielkoscRazem[i] = wielkoscAktStosu[i];
for(long i=ileNalesnikow; i<ileZjem; i++)
wielkoscRazem[i] = wielkoscRazem[ileNalesnikow-1];
}
void wyswietlWielkoscRazem()
{
cout << "Razem nalesniki:"<<endl;
for(long i=0; i<ileZjem; i++)
cout << wielkoscRazem[i] <<", ";
cout << endl;
}
void wyswietlWielkoscAkt()
{
cout << "Aktuanle nalesniki:"<<endl;
for(long i=0; i<ileZjem; i++)
cout << wielkoscAktStosu[i] <<", ";
cout << endl;
}
void poprawWielkoscRazem()
{
for(long i=ileZjem-1; i>=0; i--)
{
if(wielkoscAktStosu[i] > wielkoscRazem[i]) wielkoscRazem[i] = wielkoscAktStosu[i];
for(long j=i-1; j>=0; j--)
{
if(wielkoscRazem[j] + wielkoscAktStosu[i-j-1] > wielkoscRazem[i])
{
// cout << "i: " << i << endl;
// cout << "j: " << j << endl;
// cout << "wielkoscRazem[i]: " << wielkoscRazem[i] << endl;
// cout << "wielkoscRazem[j]: " << wielkoscRazem[j] << endl;
// cout << "wielkoscAktStosu[i-j-1]: " << wielkoscAktStosu[i-j-1] << endl;
wielkoscRazem[i] = wielkoscRazem[j] + wielkoscAktStosu[i-j-1];
// wyswietlWielkoscRazem();
}
}
}
}
int main()
{
long wielkoscAkt;
cin >> ileStosow >> ileNalesnikow >> ileZjem;
for(long i=0; i<ileStosow; i++)
{
czyscAktStos();
for(long j=0; j<ileNalesnikow; j++)
{
cin >> wielkoscAkt;
if(j==0) wielkoscAktStosu[j] = wielkoscAkt;
else wielkoscAktStosu[j] = wielkoscAktStosu[j-1]+wielkoscAkt;
}
if(i==0) stworzWielkoscRazem();
else poprawWielkoscRazem();
// cout << "i = "<<i << endl;
// wyswietlWielkoscAkt();
// wyswietlWielkoscRazem();
}
cout << wielkoscRazem[ileZjem-1];
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <iostream> using namespace std; long ileStosow; long ileNalesnikow; long ileZjem; long wielkoscRazem[300000]; long wielkoscAktStosu[300000]; void czyscAktStos() { for(long i=0; i<300000; i++) wielkoscAktStosu[i] = 0; } void stworzWielkoscRazem() { for(long i=0; i<ileNalesnikow; i++) wielkoscRazem[i] = wielkoscAktStosu[i]; for(long i=ileNalesnikow; i<ileZjem; i++) wielkoscRazem[i] = wielkoscRazem[ileNalesnikow-1]; } void wyswietlWielkoscRazem() { cout << "Razem nalesniki:"<<endl; for(long i=0; i<ileZjem; i++) cout << wielkoscRazem[i] <<", "; cout << endl; } void wyswietlWielkoscAkt() { cout << "Aktuanle nalesniki:"<<endl; for(long i=0; i<ileZjem; i++) cout << wielkoscAktStosu[i] <<", "; cout << endl; } void poprawWielkoscRazem() { for(long i=ileZjem-1; i>=0; i--) { if(wielkoscAktStosu[i] > wielkoscRazem[i]) wielkoscRazem[i] = wielkoscAktStosu[i]; for(long j=i-1; j>=0; j--) { if(wielkoscRazem[j] + wielkoscAktStosu[i-j-1] > wielkoscRazem[i]) { // cout << "i: " << i << endl; // cout << "j: " << j << endl; // cout << "wielkoscRazem[i]: " << wielkoscRazem[i] << endl; // cout << "wielkoscRazem[j]: " << wielkoscRazem[j] << endl; // cout << "wielkoscAktStosu[i-j-1]: " << wielkoscAktStosu[i-j-1] << endl; wielkoscRazem[i] = wielkoscRazem[j] + wielkoscAktStosu[i-j-1]; // wyswietlWielkoscRazem(); } } } } int main() { long wielkoscAkt; cin >> ileStosow >> ileNalesnikow >> ileZjem; for(long i=0; i<ileStosow; i++) { czyscAktStos(); for(long j=0; j<ileNalesnikow; j++) { cin >> wielkoscAkt; if(j==0) wielkoscAktStosu[j] = wielkoscAkt; else wielkoscAktStosu[j] = wielkoscAktStosu[j-1]+wielkoscAkt; } if(i==0) stworzWielkoscRazem(); else poprawWielkoscRazem(); // cout << "i = "<<i << endl; // wyswietlWielkoscAkt(); // wyswietlWielkoscRazem(); } cout << wielkoscRazem[ileZjem-1]; return 0; } |
English