


Program C++ untuk mengetahui bilangan mata minimum yang diperlukan untuk mencapai skor G
Andaikan kita mempunyai dua tatasusunan p dan c, setiap tatasusunan mempunyai elemen D, dan terdapat satu lagi nombor G. Pertimbangkan bahawa dalam pertandingan pengaturcaraan, setiap soalan diberi markah berdasarkan kesukarannya. Markah soalan p[i] ialah 100i. Masalah p[1] + ... + p[D] ini adalah semua masalah dalam pertandingan. Pengguna di laman web pengaturcaraan mempunyai jumlah_skor berangka. Jumlah_skor pengguna ialah jumlah dua elemen berikut.
Skor asas: Jumlah markah semua masalah yang diselesaikan
Ganjaran: Apabila pengguna menyelesaikan semua masalah dengan skor 100i, sebagai tambahan kepada skor asas, ganjaran yang sempurna c[ i] akan diperolehi .
Amal baru dalam pertandingan dan masih belum menyelesaikan sebarang masalah. Matlamatnya adalah untuk mendapatkan gred keseluruhan G atau lebih. Kita perlu mengetahui berapa banyak masalah yang perlu dia selesaikan sekurang-kurangnya untuk mencapai matlamat ini.
Jadi jika input adalah G = 500; P = [3, 5]; C = [500, 800] maka output akan menjadi 3
Langkah
Untuk menyelesaikan masalah ini kita akan mengikuti langkah berikut:
D := size of p mi := 10000 for initialize i := 0, when i < 1 << D, update (increase i by 1), do: sum := 0 count := 0 at := 0 an array to store 10 bits b, initialize from bit value of i for initialize j := 0, when j < D, update (increase j by 1), do: if jth bit in b is 1, then: count := p[j] sum := sum + ((j + 1) * 100 * p[j] + c[j] Otherwise at := j if sum < G, then: d := (G - sum + (at + 1) * 100 - 1) / ((at + 1) * 100) if d <= p[at], then: sum := sum + (at + 1) count := count + d if sum >= G, then: mi := minimum of mi and count return mi
Contoh
Mari kita lihat pelaksanaan di bawah untuk pemahaman yang lebih baik −
#include <bits/stdc++.h> using namespace std; int solve(int G, vector<int> p, vector<int> c){ int D = p.size(); int mi = 10000; for (int i = 0; i < 1 << D; i++){ int sum = 0; int count = 0; int at = 0; bitset<10> b(i); for (int j = 0; j < D; j++){ if (b.test(j)){ count += p.at(j); sum += (j + 1) * 100 * p.at(j) + c.at(j); } else { at = j; } } if (sum < G){ int d = (G - sum + (at + 1) * 100 - 1) / ((at + 1) * 100); if (d <= p.at(at)){ sum += (at + 1) * 100 * d; count += d; } } if (sum >= G) { mi = min(mi, count); } } return mi; } int main() { int G = 500; vector<int> P = { 3, 5 }; vector<int> C = { 500, 800 }; cout << solve(G, P, C) << endl; }
Input
500, { 3, 5 }, { 500, 800 }
Output
3
Atas ialah kandungan terperinci Program C++ untuk mengetahui bilangan mata minimum yang diperlukan untuk mencapai skor G. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Diberikan di bawah adalah algoritma bahasa C untuk menukar angka Rom kepada nombor perpuluhan: Algoritma Langkah 1 - Mulakan Langkah 2 - Baca angka Rom pada masa jalan Langkah 3 - Panjang: = strlen(roman) Langkah 4 - Untuk i=0 kepada Length-1 Langkah 4.1-suis(roman[i]) Langkah 4.1.1-case'm': &nbs

Perbandingan rentetan leksikografi bermaksud rentetan dibandingkan dalam susunan kamus. Contohnya, jika terdapat dua rentetan 'epal' dan 'rayuan', rentetan pertama akan datang yang terakhir kerana tiga aksara pertama 'aplikasi' adalah sama. Kemudian untuk rentetan pertama aksara ialah 'l' dan dalam rentetan kedua aksara keempat ialah 'e'. Memandangkan 'e' lebih pendek daripada 'l', ia akan didahulukan jika kita menyusun mengikut leksikografi. Rentetan dibandingkan secara leksikografi sebelum disusun. Dalam artikel ini, kita akan melihat teknik yang berbeza untuk membandingkan dua rentetan secara leksikografi menggunakan C++. Menggunakan fungsi compare() dalam rentetan C++ Objek rentetan C++ mempunyai compare()

Terdapat satu jenis permainan rumah dalam Yanyu Jianghu Pemain bebas membina rumah mereka sendiri Selepas rumah berjaya dibina, mereka juga akan mendapat skor rumah Pada masa yang sama, skor rumah dalam permainan juga kaedah pengiraan Sudah tentu, kaedah pengiraannya juga Ia akan dikira menggunakan kaedah pengiraan yang diberikan, dan pemain boleh melihat. Kaedah pengiraan skor rumah di Yanyujianghu 1. Skor rumah: skor penampilan, skor penempatan, skor skala, dan penyelidikan dibahagikan kepada empat bahagian 2. Skor penampilan: terutamanya membina mata bonus kulit dan mata bonus bergerak (200 mata). dua kulit bangunan. Terdapat dua jenis, satu adalah tampalan tangan ditukar di kedai rumah di atas, dan satu lagi adalah tampalan kulit pada meja putar 3. Mata penempatan: mata yang diperolehi oleh perabot buatan, had atas hijau 10 mata, had atas biru ialah 15 mata, dan had atas ungu ialah 10 mata.

Mungkin ramai yang tidak tahu cara memasukkan pecahan ke dalam Word Lagipun, kita tidak sering menghadapi situasi memasukkan pecahan. Tetapi ia akan menjadi lebih menyusahkan jika anda menghadapinya, jadi kami harus memahami cara memasukkan skor Word. Memasukkan pecahan dalam Word sebenarnya sangat mudah Seterusnya, saya akan berkongsi cara memasukkan pecahan dalam Word. Terdapat banyak cara untuk memasukkan pecahan dalam Word, salah satunya adalah dengan menggunakan fungsi formula sisipan. Langkah-langkahnya adalah seperti berikut: Selepas membuka dokumen Word, klik pilihan [Sisipkan] dalam bar menu, dan kemudian pilih [Formula] dalam menu pop timbul. Ini akan membuka editor formula di mana anda boleh memasukkan pecahan yang dikehendaki. Dalam editor, anda boleh menggunakan butang format pecahan untuk mencipta pecahan, atau masukkan "\frac{numerator}{" secara manual

Fungsi hiperbola ditakrifkan menggunakan hiperbola dan bukannya bulatan dan bersamaan dengan fungsi trigonometri biasa. Ia mengembalikan parameter nisbah dalam fungsi sinus hiperbolik dari sudut yang dibekalkan dalam radian. Tetapi lakukan sebaliknya, atau dengan kata lain. Jika kita ingin mengira sudut daripada sinus hiperbolik, kita memerlukan operasi trigonometri hiperbolik songsang seperti operasi sinus songsang hiperbolik. Kursus ini akan menunjukkan cara menggunakan fungsi sinus songsang hiperbolik (asinh) dalam C++ untuk mengira sudut menggunakan nilai sinus hiperbolik dalam radian. Operasi arcsine hiperbolik mengikut formula berikut -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}, Di mana\:In\:is\:logaritma asli\:(log_e\:k)

Senarai terpaut menggunakan peruntukan memori dinamik, iaitu ia berkembang dan mengecut dengan sewajarnya. Ia ditakrifkan sebagai koleksi nod. Di sini, nod mempunyai dua bahagian, data dan pautan. Data, pautan dan senarai terpaut diwakili seperti berikut - Jenis senarai terpaut Terdapat empat jenis senarai terpaut, seperti berikut: - Senarai pautan tunggal / Senarai pautan tunggal Senarai berganda / Berganda Pekeliling Senarai pautan tunggal Pekeliling Senarai pautan berganda Kami menggunakan kaedah rekursif untuk mencari panjang senarai terpaut Logiknya ialah -intlength(nod *temp){ if(temp==NULL) returnl{&n

Peta ialah sejenis bekas khas dalam C++ di mana setiap elemen adalah sepasang dua nilai, iaitu nilai kunci dan nilai dipetakan. Nilai kunci digunakan untuk mengindeks setiap item, dan nilai yang dipetakan ialah nilai yang dikaitkan dengan kunci. Tidak kira sama ada nilai yang dipetakan adalah unik, kuncinya sentiasa unik. Untuk mencetak elemen peta dalam C++ kita perlu menggunakan iterator. Elemen dalam set item ditunjukkan oleh objek iterator. Iterator digunakan terutamanya dengan tatasusunan dan jenis bekas lain (seperti vektor), dan mereka mempunyai set operasi khusus yang boleh digunakan untuk mengenal pasti elemen tertentu dalam julat tertentu. Iterator boleh dinaikkan atau dikurangkan untuk merujuk elemen berbeza yang terdapat dalam julat atau bekas. Peulang menunjuk ke lokasi memori elemen tertentu dalam julat. Mencetak peta dalam C++ menggunakan iterator Mula-mula, mari lihat cara untuk mentakrifkan

Fungsi nama semula menukar fail atau direktori daripada nama lamanya kepada nama baharunya. Operasi ini serupa dengan operasi bergerak. Jadi kita juga boleh menggunakan fungsi nama semula ini untuk memindahkan fail. Fungsi ini wujud dalam fail pengepala perpustakaan stdio.h. Sintaks fungsi nama semula adalah seperti berikut: intrename(constchar*oldname,constchar*newname); Fungsi rename() fungsi menerima dua parameter. Satu nama lama dan satu lagi nama baru. Kedua-dua parameter adalah penunjuk kepada aksara malar yang mentakrifkan nama lama dan baharu fail. Mengembalikan sifar jika fail berjaya dinamakan semula, jika tidak, mengembalikan integer bukan sifar. Semasa operasi menamakan semula
