Cod sursa(job #848593)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 5 ianuarie 2013 17:11:28
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.16 kb
#include <fstream>

#define MAX 32
#define REST 3210121
#define MAXS 16384

using namespace std;

int v[MAX][MAX], dp[MAX][MAXS], rez, s, a[MAX][MAX], n, k;

void back(int start, int semn, int poz)
{
    for(int i = start; i <= n; i++)
    {
        int S = s;
        for(int j = 1; j <= k; j++)
        {
            a[poz][j] = max(a[poz - 1][j], v[i][j]);
            S -= a[poz][j];
        }
        if(S >= 0)
            rez = (rez + semn * dp[k][S]) % REST;
        back(i + 1, -1 * semn, poz + 1);
    }
}

int main()
{
    ifstream in("cowfood.in");
    in>>k>>s>>n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= k; j++)
            in>>v[i][j];
    in.close();
    dp[0][0] = dp[1][0] = 1;
    for(int i = 1; i <= k; ++i, dp[i][0] = 1)
        for(int j = 1; j <= s; j++)
            dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % REST;
    for(int i = 2; i <= s; i++)
        rez = (rez + dp[k][i] - k) % REST;
    for(int i = 1; i <= s; i++)
        dp[k][i] = (dp[k][i - 1] + dp[k][i]) % REST;
    back(1, -1, 1);
    if(rez < 0) rez += REST;
    ofstream out("cowfood.out"); out<<rez; out.close();
    return 0;
}