Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sc( x ) scanf( "%d" , &x )
- #define REP( i , n ) for( int i = 0 ; i < n ; i++ )
- #define clr( t , val ) memset( t , val , sizeof(t) )
- #define all(v) v.begin() , v.end()
- #define pb push_back
- #define SZ( v ) ((int)(v).size())
- #define mp make_pair
- #define fi first
- #define se second
- #define test() puts("************test************");
- #define DEBUG( x ) cout << #x << "=" << x << endl;
- #define DEBUG2( x , y ) cout << #x << "=" << x << " " << #y << "=" << y << endl;
- #define N 400
- #define INF 1000000000
- typedef long long ll;
- typedef pair< int , int > pii;
- typedef vector< int > vi;
- typedef vector< vi > vvi;
- bool used[ N + 5 ][ N + 5 ];
- int memo[ N + 5 ][ N + 5 ];
- int A[ 2 ][ N + 5 ];
- int n;
- int dp( int pos , int cur ){
- if( pos == n ) return cur == 0 ? 0 : INF;
- if( used[ pos ][ cur ] ) return memo[ pos ][ cur ];
- used[ pos ][ cur ] = 1;
- int &dev = memo[ pos ][ cur ] = dp( pos + 1 , cur );
- REP( k , 2 )
- if( cur ) dev = min( dev , A[ k ][ pos ] + dp( pos + 1 , cur - 1 ) );
- return dev;
- }
- int main(){
- int m;
- while( sc( m ) == 1 ){
- sc( n );
- REP( k , 2 ) REP( i , n ) sc( A[ k ][ i ] );
- clr( used , 0 );
- printf( "%d\n" , dp( 0 , m ) );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment