Pagini recente » Cod sursa (job #1381) | Cod sursa (job #1298231) | Cod sursa (job #2235942) | Cod sursa (job #3135614) | Cod sursa (job #1941755)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("provacanta.in");
ofstream fout("provacanta.out");
const int MAXNM = 110;
const int MAXK = 1005;
struct Activitate{
int t, p;
};
int T, N, M, K;
Activitate p[MAXNM], v[MAXNM];
int Dp[MAXK][MAXNM];
int Dv[MAXK][MAXNM];
int pmax;
void ReadTest();
void Solve();
int main()
{
fin >> T;
while ( T-- )
{
ReadTest();
Solve();
}
fin.close();
fout.close();
return 0;
}
void ReadTest()
{
int i;
fin >> N >> M >> K;
for ( i = 1; i <= N; i++ )
fin >> p[i].t >> p[i].p;
for ( i = 1; i <= M; i++ )
fin >> v[i].t >> v[i].p;
}
void Solve()
{
memset(Dp, -1, sizeof(Dp));
memset(Dv, -1, sizeof(Dv));
int i, j, k, zp;
Dp[0][0] = 0;
for ( k = 1; k <= N; k++ )
{
for ( i = K; i >= 0; i-- )
{
// if ( k == N && i == 1 )
// fout << "DA\n";
for ( j = 0; j < N; j++ )
if ( Dp[i][j] != -1 && i + p[k].t <= K )
Dp[i + p[k].t][j + 1] = max( Dp[i + p[k].t][j + 1], Dp[i][j] + p[k].p );
}
}
Dv[0][0] = 0;
for ( k = 1; k <= M; k++ )
{
for ( i = K; i >= 0; i-- )
for ( j = 0; j < M; j++ )
if ( Dv[i][j] != -1 && i + v[k].t <= K )
Dv[i + v[k].t][j + 1] = max( Dv[i + v[k].t][j + 1], Dv[i][j] + v[k].p );
}
for ( i = 1; i <= K; i++ )
for ( j = 0; j <= N; j++ )
Dv[i][j] = max( Dv[i][j], Dv[i - 1][j] );
/* for ( i = 0; i <= K; i++ )
{
fout << "Ziua: " << i << " ";
for ( j = 0; j <= N; j++ )
fout << Dp[i][j] << ' ';
fout << '\n';
}
fout << '\n';
for ( i = 0; i <= K; i++ )
{
fout << "Ziua: " << i << " ";
for ( j = 0; j <= N; j++ )
fout << Dv[i][j] << ' ';
fout << '\n';
}
*/
for ( i = 1; i <= K; i++ )
{
for ( j = 1; j <= N; j++ )
{
for ( k = 0; k <= M; k++ )
{
// if ( i == 6 && j == )
k++;
if ( k >= j ) zp = 0;
else
if ( j % k == 0 )
{
zp = (( j / k ) - 1);
zp = k*( zp * ( zp + 1 ) / 2 );
}
else
{
int r = j % k;
zp = (( j / k ) - 1);
zp = k*( zp * ( zp + 1 ) / 2 );
zp += r * ( j / k );
}
k--;
int zt = zp + i;
if ( K - zt >= 0 && Dv[K - zt][k] != -1 )
pmax = max( pmax, Dp[i][j] + Dv[K - zt][k] );
}
}
}
fout << pmax << '\n';
pmax = 0;
}