Pagini recente » Cod sursa (job #1186757) | Cod sursa (job #671043) | Cod sursa (job #1911967) | Cod sursa (job #2244842) | Cod sursa (job #793758)
Cod sursa(job #793758)
#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;
}