Submission #875488

#TimeUsernameProblemLanguageResultExecution timeMemory
875488auslanderK blocks (IZhO14_blocks)C++17
0 / 100
2 ms6744 KiB
#include <iostream> #include <algorithm> #include <math.h> #include <sstream> #include <string> #include <iomanip> #include <queue> #include <stack> #include <deque> #include <set> #include <map> #include <vector> #include <iterator> using namespace std; //defines #define ll long long #define usg unsigned #define kap map #define print(x, n) for(int for_loop = 0; for_loop < n; for_loop++){cout<<x[for_loop]<<' ';}cout<<endl; #define read(x, n) for(int for_loop = 0; for_loop < n; for_loop++){cin>>x[for_loop];} #define speed ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); #define ratdig(x) cout << fixed << setprecision(x); #define xfixdig(x) cout << setprecision(x); #define multi int t; cin>>t; presolve(); while(t--) solve() #define single presolve(); solve(); return 0 #define rev(x) reverse(x.begin(), x.end()) #define all(x) x.begin(), x.end() //functions void yn(bool b) { if (b) { cout << "YES\n"; return; } cout << "NO\n"; } ll gcd(ll a, ll b) { if (a == 0) return b; if (b == 0) return a; return gcd(b % a, a); } ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); } string to2(ll a) { string r = ""; for (ll i = a; i > 0; ) { ll k = i % 2; i /= 2; char c = k + 48; r += c; } if (a == 0) { r = "0"; } rev(r); return r; } ll binpow(ll a, ll b, ll mod = -1) { ll ans = 1; while (b) { if ((b & 1) == 1) { ans *= a; if (mod != -1) ans %= mod; } b >>= 1; a *= a; if (mod != -1) a %= mod; } return ans; } //body void presolve() { } const int N = 100005; const int K = 105; ll arr[N], sum[N]; pair<ll, ll> dp[K][N];//dp, max void solve() { ll i, j, k, m, n; cin >> n >> m; for (i = 0; i < n; i++) { cin >> arr[i]; sum[i] = arr[i]; if (i > 0) sum[i] += sum[i - 1]; } k = arr[0]; dp[0][0].first = k; dp[0][0].second = k; for (i = 1; i < n; i++) { k = max(k, arr[i]); dp[0][i] = { k , k }; //cout << k << ' '; } ll w = 0; //cout << endl; for (i = 1; i < m; i++) { dp[i][i] = { sum[i], arr[i] }; for (j = i + 1; j < n; j++) { dp[i][j] = { dp[i - 1][j - 1].first + arr[j], arr[j]}; if (dp[i][j - 1].second > arr[j]) { if (dp[i][j - 1].first < dp[i][j].first) { dp[i][j] = dp[i][j - 1]; } else if (dp[i][j - 1].first == dp[i][j].first) dp[i][j].second = max(dp[i][j - 1].second, dp[i][j].second); } else { if (dp[i][j - 1].first + arr[j] - dp[i][j - 1].second <= dp[i][j].first) { dp[i][j] = dp[i][j - 1]; dp[i][j].first += arr[j] - dp[i][j - 1].second; dp[i][j].second = arr[j]; } else if (dp[i][j - 1].first == dp[i][j].first) dp[i][j].second = max(dp[i][j].second, arr[j]); } /*cout << dp[i][j] << ' ';*/ } /*cout << endl;*/ } cout << dp[m - 1][n - 1].first << endl; } int main() { speed; single; multi; return 0; }

Compilation message (stderr)

blocks.cpp: In function 'void solve()':
blocks.cpp:124:5: warning: unused variable 'w' [-Wunused-variable]
  124 |  ll w = 0;
      |     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...