• Source
    1. #include <iostream>
    2. #include <vector>
    3. #include <algorithm>
    4. #include <cstring>
    5. #include <queue>
    6. #include <ctime>
    7. #define pb push_back
    8. #define mp make_pair
    9. #define ll long long
    10. #define MOD 1e9 + 7
    11. #define ull unsigned long long
    12. #define iloop(a,b) for(ll i = a; i < b; ++i)
    13. #define jloop(a,b) for(ll j = a; j < b; ++j)
    14. using namespace std;
    15. typedef vector<int> vi;
    16. typedef vector<vi> vvi;
    17. typedef pair<int,int> ii;
    18. #define sz(a) int((a).size())
    19. #define pb push_back
    20. #define all(c) (c).begin(),(c).end()
    21. #define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
    22. #define present(c,x) ((c).find(x) != (c).end())
    23. #define cpresent(c,x) (find(all(c),x) != (c).end())
    24. #define p(a) cout << a << "\n";
    25. void solve()
    26. {
    27. int n;
    28. while(scanf("%d",&n) != EOF)
    29. {
    30. ll arr[n];
    31. iloop(0,n)
    32. {
    33. scanf("%lld",&arr[i]);
    34. }
    35. vector<vector<pair<ll, ll> > > dp(n,vector<pair<ll, ll> >(n));//second -- smoke, first -- sum
    36. for(int i = n-1; i >= 0; --i)
    37. {
    38. for(int j = i, k = n-1; j >= 0 && k >= 0; --j, --k)
    39. {
    40. if(j == k)
    41. dp[j][k] = mp(arr[j],0);
    42. else
    43. {
    44. if(dp[j+1][k].first*arr[j] + dp[j+1][k].second <= dp[j][k-1].first*arr[k] + dp[j][k-1].second)
    45. {
    46. dp[j][k].first = (dp[j+1][k].first + arr[j])%100;
    47. dp[j][k].second = dp[j+1][k].first*arr[j] + dp[j+1][k].second;
    48. }
    49. else
    50. {
    51. dp[j][k].first = (dp[j][k-1].first + arr[k])%100;
    52. dp[j][k].second = dp[j][k-1].first*arr[k] + dp[j][k-1].second;
    53. }
    54. }
    55. }
    56. }
    57. /*iloop(0,n)
    58. {
    59. jloop(0,n)
    60. {
    61. printf("%lld,%lld ", dp[i][j].first, dp[i][j].second);
    62. }
    63. printf("\n");
    64. }*/
    65. printf("%lld\n", dp[0][n-1].second);
    66. }
    67. }
    68. int main()
    69. {
    70. bool testing = false;
    71. /*std::ios::sync_with_stdio(false);
    72. cin.tie(NULL);
    73. cout.tie(NULL);*/
    74. if(testing)
    75. {
    76. freopen("test.txt","rt",stdin);
    77. int start = clock();
    78. solve();
    79. int end = clock();
    80. cout << "time: " << (end - start)/(double)(CLOCKS_PER_SEC)*1000 << " milliseconds\n";
    81. }
    82. else
    83. {
    84. solve();
    85. }
    86. }