Pagini recente » Cod sursa (job #901179) | Cod sursa (job #2345313) | Cod sursa (job #1446862) | Cod sursa (job #2946142) | Cod sursa (job #2787522)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("aprindere.in");
ofstream fout ("aprindere.out");
const int maxVal = 1001;
struct
{
int camera, timp, nr_cam_mod, profit;
int cam_mod[maxVal];
} intr[maxVal];
int main()
{
int n, m;
bool cam[maxVal];
fin >> n >> m;
int i, j;
for (i = 1; i <= n; i++)
fin >> cam[i];
for (i = 1; i <= m; i++)
{
fin >> intr[i].camera >> intr[i].timp >> intr[i].nr_cam_mod;
for (j = 1; j <= intr[i].nr_cam_mod; j++)
fin >> intr[i].cam_mod[j];
}
bool ok = false;
for (i = 1; i <= n; i++)
if (cam[i] == 0)
ok = true;
int t = 0;
while (ok)
{
ok = false;
int prof_maxim = INT_MIN, cam_max;
for (i = 1; i <= m; i++)
{
intr[i].profit = 0;
for (j = 1; j <= intr[i].nr_cam_mod; j++)
{
if (cam[intr[i].cam_mod[j]] == 0)
intr[i].profit++;
else
intr[i].profit--;
}
if (intr[i].profit > prof_maxim)
prof_maxim = intr[i].profit, cam_max = i;
}
for (j = 1; j <= intr[cam_max].nr_cam_mod; j++)
cam[intr[cam_max].cam_mod[j]] = !(cam[intr[cam_max].cam_mod[j]]);
t += intr[cam_max].timp;
for (i = 1; i <= n; i++)
if (cam[i] == 0)
ok = true;
}
fout << t;
return 0;
}