#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
void * wmem;
char memarr[ 96000000 ] ;
template < class S, class T> inline S max_L( S a,T b) {
return a>= b? a: b;
}
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T1> void sortV_L( vector< T1> & a, void * mem = wmem) {
sort( a.begin ( ) , a.end ( ) ) ;
}
template < class T1, class T2> void sortV_L( vector< T1> & a, vector< T2> & b, void * mem = wmem) {
int i;
int N = a.size ( ) ;
pair< T1, T2> * arr;
walloc1d( & arr, N, & mem) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
arr[ i] .first = a[ i] ;
arr[ i] .second = b[ i] ;
}
sort( arr, arr+ N) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
a[ i] = arr[ i] .first ;
b[ i] = arr[ i] .second ;
}
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
class Solution{
public :
int bestTeamScore( vector< int > & scores, vector< int > & ages) {
int i;
dummy_main( ) ;
int n = scores.size ( ) ;
sortV_L( ages, scores) ;
vector< int > dp = scores;
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
int j;
for ( j= ( i+ 1 ) ; j< ( n) ; j++ ) {
if ( scores[ i] <= scores[ j] ) {
chmax( dp[ j] , dp[ i] + scores[ j] ) ;
}
}
}
{
int cTE1_r3A;
int RZTsC2BF;
if ( n== 0 ) {
RZTsC2BF = 0 ;
}
else {
RZTsC2BF = dp[ 0 ] ;
for ( cTE1_r3A= ( 1 ) ; cTE1_r3A< ( n) ; cTE1_r3A++ ) {
RZTsC2BF = max_L( RZTsC2BF, dp[ cTE1_r3A] ) ;
}
}
return RZTsC2BF;
}
}
}
;
// cLay varsion 20201018-2
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int bestTeamScore(vector<int>& scores, vector<int>& ages) {
// dummy_main();
// int n = scores.size();
// sortV(ages, scores);
// VI dp = scores;
// rep(i,n) rep(j,i+1,n) if(scores[i]<=scores[j]) dp[j] >?= dp[i] + scores[j];
// return max(dp(n));
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQqd21lbTsKY2hhciBtZW1hcnJbOTYwMDAwMDBdOwp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBtYXhfTChTIGEsVCBiKXsKICByZXR1cm4gYT49Yj9hOmI7Cn0KdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgd2FsbG9jMWQoVCAqKmFyciwgaW50IHgsIHZvaWQgKiptZW0gPSAmd21lbSl7CiAgc3RhdGljIGludCBza2lwWzE2XSA9IHswLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxfTsKICAoKm1lbSkgPSAodm9pZCopKCAoKGNoYXIqKSgqbWVtKSkgKyBza2lwWygodW5zaWduZWQgbG9uZyBsb25nKSgqbWVtKSkgJiAxNV0gKTsKICAoKmFycik9KFQqKSgqbWVtKTsKICAoKm1lbSk9KCgqYXJyKSt4KTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMT4gdm9pZCBzb3J0Vl9MKHZlY3RvcjxUMT4gJmEsIHZvaWQgKm1lbSA9IHdtZW0pewogIHNvcnQoYS5iZWdpbigpLCBhLmVuZCgpKTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHZvaWQgc29ydFZfTCh2ZWN0b3I8VDE+ICZhLCB2ZWN0b3I8VDI+ICZiLCB2b2lkICptZW0gPSB3bWVtKXsKICBpbnQgaTsKICBpbnQgTiA9IGEuc2l6ZSgpOwogIHBhaXI8VDEsIFQyPiphcnI7CiAgd2FsbG9jMWQoJmFyciwgTiwgJm1lbSk7CiAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICBhcnJbaV0uZmlyc3QgPSBhW2ldOwogICAgYXJyW2ldLnNlY29uZCA9IGJbaV07CiAgfQogIHNvcnQoYXJyLCBhcnIrTik7CiAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICBhW2ldID0gYXJyW2ldLmZpcnN0OwogICAgYltpXSA9IGFycltpXS5zZWNvbmQ7CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWF4KFMgJmEsIFQgYil7CiAgaWYoYTxiKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICB3bWVtID0gbWVtYXJyOwogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgYmVzdFRlYW1TY29yZSh2ZWN0b3I8aW50PiYgc2NvcmVzLCB2ZWN0b3I8aW50PiYgYWdlcyl7CiAgICBpbnQgaTsKICAgIGR1bW15X21haW4oKTsKICAgIGludCBuID0gc2NvcmVzLnNpemUoKTsKICAgIHNvcnRWX0woYWdlcywgc2NvcmVzKTsKICAgIHZlY3RvcjxpbnQ+IGRwID0gc2NvcmVzOwogICAgZm9yKGk9KDApO2k8KG4pO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oaSsxKTtqPChuKTtqKyspewogICAgICAgIGlmKHNjb3Jlc1tpXTw9c2NvcmVzW2pdKXsKICAgICAgICAgIGNobWF4KGRwW2pdLCBkcFtpXSArIHNjb3Jlc1tqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB7CiAgICAgIGludCBjVEUxX3IzQTsKICAgICAgaW50IFJaVHNDMkJGOwogICAgICBpZihuPT0wKXsKICAgICAgICBSWlRzQzJCRiA9IDA7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBSWlRzQzJCRiA9IGRwWzBdOwogICAgICAgIGZvcihjVEUxX3IzQT0oMSk7Y1RFMV9yM0E8KG4pO2NURTFfcjNBKyspewogICAgICAgICAgUlpUc0MyQkYgPSBtYXhfTChSWlRzQzJCRiwgZHBbY1RFMV9yM0FdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFJaVHNDMkJGOwogICAgfQogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMTAxOC0yCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIGludCBiZXN0VGVhbVNjb3JlKHZlY3RvcjxpbnQ+JiBzY29yZXMsIHZlY3RvcjxpbnQ+JiBhZ2VzKSB7Ci8vICAgICBkdW1teV9tYWluKCk7Ci8vICAgICBpbnQgbiA9IHNjb3Jlcy5zaXplKCk7Ci8vICAgICBzb3J0VihhZ2VzLCBzY29yZXMpOwovLyAgICAgVkkgZHAgPSBzY29yZXM7Ci8vICAgICByZXAoaSxuKSByZXAoaixpKzEsbikgaWYoc2NvcmVzW2ldPD1zY29yZXNbal0pIGRwW2pdID4/PSBkcFtpXSArIHNjb3Jlc1tqXTsKLy8gICAgIHJldHVybiBtYXgoZHAobikpOwovLyAgIH0KLy8gfTsK