Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <math.h>
- #include <vector>
- #include <string>
- #include <utility>
- #include <stdio.h>
- #include <queue>
- #include <fstream>
- #include <functional>
- #include <cstdlib>
- #include <map>
- #include <set>
- #include <bitset>
- #include <string.h>
- #define MAX_N 5000
- #define INF 99999999
- #define N_CHAR 130
- using namespace std;
- typedef pair<int, int> ii ;
- typedef vector< ii > vii ;
- typedef vector<int> vi ;
- int N, freccia[MAX_N],memo[MAX_N][MAX_N];
- int dp(int start, int end){
- int count = 0;
- if(start >= end)
- return INF;
- if(memo[start][end]!=-1)
- return memo[start][end];
- for(int i=start;i<end;i++){
- if(i<(start+end)/2)
- count += abs(freccia[i]-0);
- else
- count +=abs(freccia[i]-1);
- }
- int sol = count;
- for(int i=start+2;i<=end-2;i+=2)
- sol = min(sol, dp(start,i) + dp(i, end));
- //cout <<start<<" "<<end<<" "<<sol<<endl;
- return memo[start][end] = sol;
- }
- int Gira(int N, int *freccia){
- memset(memo,-1,sizeof memo);
- return dp(0,N);
- }
- /*int main() {
- #ifdef EVAL
- freopen("input.txt","r",stdin);
- freopen("output.txt","r",stdout);
- #endif
- scanf("%d",&N);
- for(int i=0;i<N;i++)
- scanf("%d",freccia+i);
- //memset(memo, -1, sizeof memo);
- printf("%d",Gira(N, freccia));
- return 0;
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement