(UVa) 10074 – Take the Land

0
/*
user: php
time: 0.016 sec
link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1015
*/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>

#include<algorithm>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>



#define FOR(i, s, e) for(int i=s; i<e; i++)
#define loop(i, n) for(int i=0; i<n; i++)
#define getint(n) scanf("%d", &n)
#define pb(a) push_back(a)
#define ll long long
#define SZ size()
#define read() freopen("input.txt", "r", stdin)
#define write() freopen("output.txt", "w", stdout)
#define mem(a, v) memset(a, v, sizeof(a))
#define all(v) v.begin(), v.end()
#define pi acos(-1.0)
#define INF 1<<29
#define mod(a) (a>0?a:-a)

using namespace std;
#define MAXX 101




bool graph[MAXX][MAXX];
int presum[MAXX+1][MAXX+1];

int columns, rows;


int MIS()
{
    loop(i, columns)
    {
        loop(j, rows)
        {
            if(graph[j][i] == 1)
            {
                presum[j][i] = j;
            }
            else
            {
                if(j == 0) presum[j][i] = -1;
                else presum[j][i] = presum[j-1][i];
            }
        }
    }

    int longest_sum = 0;
    int sum;

    loop(i, rows)
    {
        FOR(j,i, rows)
        {
            sum = 0;

            loop(k, columns)
            {
                if(presum[i][k] < i && presum[j][k] < i)
                {
                    sum = sum + (j - i + 1);
                    if(longest_sum < sum)
                    {
                        longest_sum = sum;
                    }
                }
                else
                {
                    sum = 0;
                }


            }
        }
    }
    return longest_sum;
}








int main()
{
    while(true)
    {
        getint(rows); getint(columns);
        if(rows == 0  && columns == 0) break;

        loop(i, rows)
        {
            loop(j, columns)
            {
                getint(graph[i][j]);
            }
        }

        printf("%d\n", MIS());

    }

    return 0;
}

(UVa) 108 – Maximum Sum

0
/*
user: php
time: 0.012 sec
link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=44
*/


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>

#include<algorithm>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<sstream>



#define FOR(i, s, e) for(int i=s; i<e; i++)
#define loop(i, n) for(int i=0; i<n; i++)
#define getint(n) scanf("%d", &n)
#define pb(a) push_back(a)
#define ll long long
#define SZ(a) int( a.size() )
#define read() freopen("input.txt", "r", stdin)
#define write() freopen("output.txt", "w", stdout)
#define mem(a, v) memset(a, v, sizeof(a))
#define all(v) v.begin(), v.end()
#define pi acos(-1.0)
#define INF 1<<29
#define mod(a) (a>0?a:-a)

using namespace std;
#define MAXX 102



int array[MAXX][MAXX];
ll prefixsum[MAXX][MAXX];
int N;

ll MIS()
{

    loop(i, N)
    {
        prefixsum[0][i] = 0;
        for(int j=1; j <= N; j++)
        {
            prefixsum[j][i] = prefixsum[j-1][i] + array[j-1][i];
        }
    }


    ll maxsum = 0;
    ll sum = 0;

    for(int i=0; i <= N; i++)
    {
        for(int j=i+1; j <= N; j++)
        {
            sum = 0;

            loop(k, N)
            {
                sum += prefixsum[j][k] - prefixsum[i][k];

                if(sum > maxsum)
                {
                    maxsum = sum;
                }
                else if(sum < 0)
                {
                    sum = 0;
                }

            }
        }
    }

    return maxsum;



}



int main()
{
    getint(N);
    loop(i, N)
    {
        loop(j, N)
        {
            getint(array[i][j]);
        }
    }

    ll result = MIS();

    printf("%lld\n", result);






    return 0;
}



(UVa) 10684 – The jackpot

0
/*
user: php
time: 0.084 sec
link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1625
*/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>

#include<algorithm>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<sstream>



#define FOR(i, s, e) for(int i=s; i<e; i++)
#define loop(i, n) for(int i=0; i<n; i++)
#define getint(n) scanf("%d", &n)
#define pb(a) push_back(a)
#define ll long long
#define SZ(a) int(a.size())
#define read() freopen("input.txt", "r", stdin)
#define write() freopen("output.txt", "w", stdout)
#define mem(a, v) memset(a, v, sizeof(a))
#define all(v) v.begin(), v.end()
#define pi acos(-1.0)
#define INF 1<<29
#define mod(a) (a>0?a:-a)

using namespace std;

#define MAXX 10001

int main()
{
    int N;
    int num;
    ll maxbet;
    ll sum;
    while(getint(N) && N != 0)
    {
        sum = 0;
        maxbet = 0;
        loop(i, N)
        {
            getint(num);
            sum += num;
            if(sum > maxbet)
            {
                maxbet = sum;
            }
            else if( sum < 0 )
            {
                sum = 0;
            }
        }

        if(maxbet > 0)
        {
            printf("The maximum winning streak is %lld.\n", maxbet);
        }
        else
        {
            printf("Losing streak.\n");
        }
    }


    return 0;
}




(UVa) 507 – Jill Rides Again

0
/*
user: php
time: 0.132 sec
link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=448
*/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>

#include<algorithm>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<sstream>



#define FOR(i, s, e) for(int i=s; i<e; i++)
#define loop(i, n) for(int i=0; i<n; i++)
#define getint(n) scanf("%d", &n)
#define pb(a) push_back(a)
#define ll long long
#define SZ size()
#define read() freopen("input.txt", "r", stdin)
#define write() freopen("output.txt", "w", stdout)
#define mem(a, v) memset(a, v, sizeof(a))
#define all(v) v.begin(), v.end()
#define pi acos(-1.0)
#define INF 1<<29
#define mod(a) (a>0?a:-a)

using namespace std;

#define MAXX 20001

int ara[MAXX];

int paths;
int start, end;
int maxcycleride;


struct DATA{
    int start, end, cycleride;
    int maxsum;
};

DATA result;



void MIS()
{
    result.maxsum = -INF;
    result.cycleride = -INF;

    int sum = 0;
    int current_ride = 0;
    end = paths;

    for(int i=paths-1; i>-1; i--)
    {
        sum  += ara[i];
        if(ara[i] > 0 ) current_ride++;
        if( sum < 0 )
        {
            sum = 0;
            end = i;
            current_ride = 0;
        }
        else if( sum == result.maxsum)
        {
            if(current_ride >= result.cycleride )
            {
                start = i;
                result.start = start;
                result.cycleride = current_ride;
                result.end = end;
            }
        }
        else if(sum > result.maxsum)
        {
            start = i;
            result.maxsum = sum;
            result.cycleride = current_ride;
            result.end = end;
            result.start = start;
        }


    }
}




int main()
{


    int kases;
    int kaseno = 0;
    getint(kases);

    while(kases--)
    {
        getint(paths);
        paths--;

        loop(i, paths)
        {
            getint(ara[i]);
        }

        MIS();

        if(result.maxsum != -INF)
            printf("The nicest part of route %d is between stops %d and %d\n", ++kaseno, result.start+1, result.end+1);
        else
            printf("Route %d has no nice parts\n", ++kaseno);



    }


    return 0;
}