Pagini recente » Cod sursa (job #1476692) | Cod sursa (job #546824) | Cod sursa (job #146073) | Cod sursa (job #1894814) | Cod sursa (job #241413)
Cod sursa(job #241413)
#include <fstream>
using namespace std;
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
const int NMAX = 300000;
ifstream fin("tricouri.in");
ofstream fout("tricouri.out");
int N,M,t[NMAX];
long long T[6][21];
void afis(long long T[6][21])
{
for(int i = 1; i < 6 ; ++i)
{ for(int j = 1; j < 21; ++j)
{ if(T[i][j] < 10 ) fout<<0;
fout<<T[i][j]<<' '; }
fout<<'\n';
}
fout<<endl<<endl;
}
void calc()
{
long long aux[6][21];
for(int i = 0; i < N; ++i)
{
memcpy(aux,T,sizeof aux);
for(int j = 1; j < min(i + 2,6); ++j)
for(int k = 1; k < 21; ++k)
for(int l = 1; l < 21; ++l)
if( (T[j - 1][k] || j == 1) && (T[j - 1][k] + t[i]) % l == 0 )
aux[j][l] = max( aux[j][l],T[j - 1][k] + t[i]);
memcpy(T,aux,sizeof T); afis(T);
}
}
int main()
{
fin>>N>>M;
for(int i = 0; i < N; ++i)
fin>>t[i];
calc();
int x,y;
while(M--)
{
fin>>x>>y;
fout<<(T[x][y] ? T[x][y] : -1)<<'\n';
}
return 0;
}