Rumah > pembangunan bahagian belakang > C++ > Dalam C++, maksimumkan jumlah tatasusunan dengan mendarab awalannya dengan -1

Dalam C++, maksimumkan jumlah tatasusunan dengan mendarab awalannya dengan -1

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-09-08 15:17:02
ke hadapan
803 orang telah melayarinya

Dalam C++, maksimumkan jumlah tatasusunan dengan mendarab awalannya dengan -1

Kami mempunyai tatasusunan integer dan tugasnya ialah mendapatkan awalan tatasusunan dahulu dan kemudian darabkannya dengan -1, kedua hitung jumlah awalan tatasusunan dan akhirnya cari jumlah maksimum dalam awalan yang dijana tatasusunan.

Susun atur awalan dijana seperti berikut:

Unsur pertama tatasusunan awalan tatasusunan awalan[0] = elemen pertama tatasusunan

Unsur kedua tatasusunan awalanSusunatur[1] = tatasusunan awalan[0] + arr [1]

Elemen ketiga prefix array prefixArray[2] = prefixArray[1] + arr[2]

Elemen keempat prefix array prefixArray[3] = prefixArray[2] + arr[3] . ..dan lain-lain.

Mari kita lihat pelbagai situasi input dan output masalah ini -

Untuk int arr[] = {2, 4, 1, 5, 2}

Tatasusunan awalan output ialah: -2 2 3 8 10 Maksimumkan jumlah tatasusunan dengan mendarab awalannya dengan -1: 21

Penjelasan - Kami mempunyai tatasusunan integer. Mula-mula kita mendapat awalan tatasusunan, iaitu 2, dan darabkannya dengan -1. Jadi, tatasusunan baharu ialah {-2, 4, 1, 5, 2}. Sekarang, kita akan membentuk jumlah maksimum tatasusunan awalan.

Tatasusunan awalan ialah {-2, 2, 3, 8, 10}. Langkah terakhir ialah memaksimumkan jumlah kepada -2+2+3+8+`0 = 21, iaitu keluaran akhir.

Dalam - int arr[] = {-1, 4, 2, 1, -9, 6};

Output - tatasusunan awalan ialah: 1 5 7 8 -1 5 Dengan menggabungkan awalan daripada tatasusunan dengan Didarab dengan -1, jumlah tatasusunan maksimum ialah: 19

Penjelasan- Kami mempunyai tatasusunan integer. Mula-mula kita ambil awalan tatasusunan sebagai -1 dan darabkannya dengan -1. Jadi, tatasusunan baharu ialah {1, 4, 2, 1, -9, 6}. Sekarang kita akan membentuk Tatasusunan awalan ialah {1, 5, 7, 8, -1, 5}. Langkah terakhir ialah memaksimumkan jumlah kepada 1+5+8+5 = 19, iaitu keluaran akhir.

Kaedah yang digunakan dalam atur cara di bawah adalah seperti berikut −

  • Isytihar tatasusunan integer dan pembolehubah sementara x sebagai -1, dan kemudian tetapkan arr[0] kepada arr[0] * x.

  • Kira saiz tatasusunan. Isytihar tatasusunan awalan awalan_susun[saiz]. Panggil fungsi create_prefix_arr(arr, size, prefix_array) untuk menjana tatasusunan awalan untuk tatasusunan yang diberikan. Mencetak tatasusunan awalan

  • memanggil fungsi maximize_sum(prefix_array, size), yang akan menyimpan jumlah maksimum tatasusunan.

  • Di dalam fungsi void create_prefix_arr(int arr[], saiz int, int prefix_array[])

    • set prefix_array[0] kepada arr[0].

    • Mulakan gelung dari i hingga 0 sehingga saiz tatasusunan. Di dalam gelung, tetapkan susunan_prefix[i] kepada tatasusunan_prefix[i-1] + arr[i].

  • Di dalam fungsi int maximize_sum(int prefix_array[], saiz int)

    • isytiharkan temp pembolehubah sementara dan tetapkannya kepada -1.

    • Mulakan gelung dari i hingga 0 sehingga saiz tatasusunan. Di dalam gelung, tetapkan temp kepada max(temp, prefix_array[i])

    • Isytiharkan tatasusunan arr[temp +1] dan mulakan semua elemen tatasusunan kepada 0.

    • Mulakan gelung dari i hingga 0 sehingga saiz tatasusunan. Di dalam gelung, isytiharkan pembolehubah sementara max_sum arr[prefix_array[i]]++

    • dan tetapkannya kepada 0. Isytiharkan pembolehubah i sebagai temp

    • untuk memulakan gelung apabila i>0. Semak jika arr[i] > 0, kemudian tetapkan max_sum kepada max_sum + i, dan tetapkan arr[i-1]-- dan arr[i]--. Jika tidak, susutkan i sebanyak 1.

    • Pulangan max_sum.

Contoh

#include <bits/stdc++.h>
using namespace std;
#define Max_size 5
//create the prefix array
void create_prefix_arr(int arr[], int size, int prefix_array[]) {
   prefix_array[0] = arr[0];
   for(int i=0; i<size; i++)  {
      prefix_array[i] = prefix_array[i-1] + arr[i];
   }
}
//find the maximum sum of prefix array
int maximize_sum(int prefix_array[], int size) {
   int temp = -1;
   for(int i = 0; i < size; i++) {
      temp = max(temp, prefix_array[i]);
   }
   int arr[temp + 1];
   memset(arr, 0, sizeof(arr));

   for(int i = 0; i < size; i++) {
      arr[prefix_array[i]]++;
   }
   int max_sum = 0;
   int i = temp;
   while(i>0) {
      if(arr[i] > 0) {
         max_sum = max_sum + i;
         arr[i-1]--;
         arr[i]--;
      } else {
         i--;
      }
   }
   return max_sum;
}

int main() {
   int arr[] = {2, 4, 1, 5, 2};
      int x = -1;
      arr[0] = arr[0] * x;
      int size = sizeof(arr) / sizeof(arr[0]);
   int prefix_array[size];

   //call function to create a prefix array
   create_prefix_arr(arr, size, prefix_array);
   //print the prefix array
   cout<<"Prefix array is: ";
   for(int i = 0; i < size; i++) {
      cout << prefix_array[i] << " ";
   }
   //print the maximum sum of prefix array
   cout<<"\nMaximize the sum of array by multiplying prefix of array with -1 are:" <<maximize_sum(prefix_array, size);
   return 0;
}
Salin selepas log masuk

Output

Jika kita menjalankan kod di atas, output berikut akan dihasilkan

Prefix array is: -2 2 3 8 10
Maximize the sum of array by multiplying prefix of array with -1 are: 21
Salin selepas log masuk

Atas ialah kandungan terperinci Dalam C++, maksimumkan jumlah tatasusunan dengan mendarab awalannya dengan -1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan