Submission #120155

#TimeUsernameProblemLanguageResultExecution timeMemory
120155antimirageGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++14
15 / 100
322 ms355084 KiB
/** GOT A FEELING THAT I"M GOING UNDER **/ #include <bits/stdc++.h> #define fr first #define sc second #define mk make_pair #define pb push_back #define all(s) s.begin(), s.end() using namespace std; const int N = 1505; int n, a[N]; string s; int dp[N][N][10][4], ans = 1e9 + 7; void update (int &a, int b) { a = b; } main(){ cin >> n >> s; s = ' ' + s; for (int i = 1; i <= n; i++) { if (s[i] == 'R') a[i] = 1; else if (s[i] == 'G') a[i] = 2; } memset( dp, 0x3f3f3f3f, sizeof(dp)); dp[1][1][1 << a[1]][3] = 0; for (int i = 1; i < n; i++) { for (int j = 1; j <= i; j++) { for (int mask = 1; mask < 8; mask++) { for (int last = 0; last <= 3; last++) { if ( (mask & (1 << a[i + 1]) ) == 0 ) { if (a[i + 1] != last) dp[i + 1][j][mask][ a[i + 1] ] = min( dp[i][j][mask][last] + j, dp[i + 1][j][mask][ a[i + 1] ] ); if (j > 1) dp[i + 1][j - 1][mask][ a[i + 1] ] = min( dp[i][j][mask][last] + j - 1, dp[i + 1][j - 1][mask][ a[i + 1] ] ); if (__builtin_popcount(mask) == 1 && j == 1) { for (int l = 0; l < 3; l++) { if (mask & (1 << l) ) { dp[i + 1][1][1 << a[i + 1]][l] = min( dp[i + 1][1][1 << a[i + 1]][l], dp[i][j][mask][last] ); } } } } dp[i + 1][j + 1][mask | (1 << a[i + 1])][last] = min( dp[i][j][mask][last], dp[i + 1][j + 1][mask | (1 << a[i + 1])][last] ); } } } } for (int i = 0; i <= 3; i++) for (int j = 0; j <= 3; j++) ans = min(ans, dp[n][1][1 << i][j]); if (ans == 1e9 + 7) ans = -1; cout << ans << endl; }

Compilation message (stderr)

joi2019_ho_t3.cpp:26:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...