<!DOCTYPE html>
	<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
	<head>
<title>&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array</title>
<meta name="description" content="&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array - Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;hoat-dong-chuyen-mon&#x002F;c-co-ban-phan-14-mang-array-108.html">
<meta name="author" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta name="copyright" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG [webmaster@tinhocdct.xyz]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;hoat-dong-chuyen-mon&#x002F;c-co-ban-phan-14-mang-array-108.html">
<meta property="og:site_name" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta property="og:url" content="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-14-mang-array-108.html">
<link rel="shortcut icon" href="https://tinhocdct.xyz/favicon.ico">
<link rel="canonical" href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-14-mang-array-108.html">
<link rel="alternate" href="https://tinhocdct.xyz/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-tuc/" title="Tin Tức - TIN TỨC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thong-cao-bao-chi/" title="Tin Tức - THÔNG BÁO" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ban-tin-noi-bo/" title="Tin Tức - BẢN TIN NỘI BỘ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-cong-nghe/" title="Tin Tức - CÔNG NGHỆ - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thu-thuat/" title="Tin Tức - THỦ THUẬT" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tien-ich/" title="Tin Tức - TIỆN ÍCH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ai/" title="Tin Tức - AI" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/khoa-hoc/" title="Tin Tức - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-chuyen-mon/" title="Tin Tức - HOẠT ĐỘNG CHUYÊN MÔN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-cong-doan/" title="Tin Tức - CÔNG ĐOÀN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-doan-the/" title="Tin Tức - ĐOÀN THỂ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-huong-nghiep/" title="Tin Tức - TUYỂN SINH - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-2025/" title="Tin Tức - TUYỂN SINH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/huong-nghiep/" title="Tin Tức - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/lich-cong-tac-tuan/" title="Tin Tức - Lịch công tác tuần" type="application/rss+xml">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/language/vi.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/global.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/news.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/main.js">
<link rel="preload" as="script" href="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js">
<link rel="StyleSheet" href="https://tinhocdct.xyz/assets/css/font-awesome.min.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/bootstrap.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/news.css">
<style>
	body{background: #fff;}
</style>
	</head>
	<body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG</h2>
		<p class="pull-right"><a title="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG" href="https://tinhocdct.xyz/">https://tinhocdct.xyz</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array</h1>
		<ul class="list-inline">
			<li>Thứ tư - 14/04/2021 09:12</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			Trong phần trước, chúng ta đã đặt ra bài toán Lưu trữ thông tin cá nhân của người dân thành phố Hà Nội, và đúc kết ra rằng phải sử dụng các vòng lặp mới có thể duyệt qua và xử lý hết số lượng thông tin như vậy.
		</div>
				<div class="imghome">
			<img alt="&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array" src="https://tinhocdct.xyz/uploads/news/2021_04/cpp-co-ban-1-3.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p><em>Phần trước:&nbsp;<a href="http://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-13-vong-lap-107.html" target="_blank">&#91;C++ Cơ bản&#93; Phần 13: Vòng lặp</a></em><br  />
Tương tự, ta cũng không thể tự tay tạo ra từng biến để lưu trữ thông tin của người dân Hà Nội được - ta sẽ phải tạo tới hơn 7 triệu biến, ai có tưng đấy thời gian cơ chứ? Bài viết này sẽ đề cập tới mảng - một cách để khai báo nhiều biến có cùng kiểu giá trị.</p>

<h1 id="định-nghĩa-mảng">Định nghĩa mảng</h1>

<p>Mảng (array) là một cấu trúc dữ liệu có kích cỡ cố định, dùng để lưu trữ nhiều đối tượng có cùng kiểu dữ liệu. Thay vì phải tạo ra từng biến&nbsp;<code>person1</code>,&nbsp;<code>person2</code>,&nbsp;<code>person3</code>, vân vân, ta chỉ cần tạo ra một mảng&nbsp;<code>people</code>&nbsp;và truy cập vào từng phần tử&nbsp;<code>people&#91;0&#93;</code>,&nbsp;<code>people&#91;1&#93;</code>,&nbsp;<code>people&#91;2&#93;</code>,…</p>

<p>Các biến trong array được lưu trữ tại các địa chỉ ô nhớ liên tiếp - phần tử đầu tiên ở vị trí đầu tiên, phần tử thứ hai ở vị trí thứ hai,… Thông tin này sẽ có ích khi ta học tới con trỏ bộ nhớ, còn giờ tạm thời hãy ghi nhớ lại điều đó đã.</p>

<h1 id="khai-báo-mảng">Khai báo mảng</h1>

<p>Việc khai báo mảng cũng giống như việc khai báo biến, tuy nhiên ta cần phải cung cấp thêm kích cỡ các chiều (số lượng phần tử) của mảng vào trong ngoặc vuông đặt sau tên mảng.</p>

<p>Ví dụ:</p>

<figure>
<pre>
<code data-lang="c++">int array1&#91;100&#93;;
int x, array2&#91;100&#93;; /* có thể khai báo mảng cùng với các biến khác */
int arrayTwoD&#91;100&#93;&#91;100&#93;; /* mảng hai chiều */</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
Chiều của mảng là gì? Ta có thể hình dung mảng nhiều chiều là mảng chứa các mảng - mảng hai chiều là mảng với các phần tử là mảng 1 chiều, mảng 3 chiều là mảng với các phần tử là mảng 2 chiều, vân vân… Ví dụ thực tế của mảng nhiều chiều là một bảng dữ liệu, bao gồm các hàng và cột giống như mảng hai chiều.</p>

<h1 id="truy-cập-vào-phần-tử-của-mảng"><strong>Truy cập vào phần tử của mảng</strong></h1>

<p>Để có thể truy cập vào phần tử của mảng, ta gọi tên của mảng kèm theo với chỉ số nằm trong ngoặc nhọn đặt sau tên của mảng.</p>

<p>Ví dụ</p>

<figure>
<pre>
<code data-lang="c++">array1&#91;0&#93; = 0; /* đặt phần tử đầu tiên của mảng array1 bằng 0 */
array2&#91;4&#93; ++; /* tăng phần tử thứ 5 của mảng array2 lên 1 */
cout &lt;&lt; arrayTwoD&#91;2&#93;&#91;3&#93;; /* in ra phần tử ở ví trí (2, 3) của mảng hai chiều arrayTwoD */</code></pre>
</figure>

<p>Chỉ số của các phần tử trong mảng bắt đầu từ số 0 - một mảng có&nbsp;<code>n</code>&nbsp;phần tử sẽ có các chỉ số 0, 1, 2,… tới&nbsp;<code>n - 1</code>. Để thuận tiện hơn, ta sẽ hình dung chỉ số của phần tử là số phần tử nằm giữa phần tử đó, với phần tử đầu tiên.</p>

<h1 id="khởi-tạo-giá-trị-cho-phần-tử-của-mảng">Khởi tạo giá trị cho phần tử của mảng</h1>

<p>Khi khai báo mảng, các phần tử của mảng chưa được khởi tạo giá trị.</p>

<p>Để khai báo mảng với giá trị khởi tạo cho các phần tử, ta gán mảng bằng các giá trị khởi tạo trong ngoặc nhọn, phân cách bởi dấu phẩy. Ví dụ</p>

<figure>
<pre>
<code data-lang="c++">double arr&#91;5&#93; = {1, 2.0, 3.0, 3.14, 2.23};</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
Ta cũng có thể khai báo mảng mà không có số lượng phần tử, nếu như ta đã khởi tạo giá trị cho các phần tử trong mảng. Khi đó số lượng phần tử của mảng sẽ bằng số lượng giá trị đã được khởi tạo.</p>

<figure>
<pre>
<code data-lang="c++">double arr&#91;&#93; = {1, 2.0, 3.0, 3.14, 2.23}; /* mảng có 5 phần tử */</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
Để khởi tạo giá trị cho mảng nhiều chiều, ta cũng đặt mảng giá trị khởi tạo của các phần tử trong ngoặc nhọn. Ví dụ về việc khởi tạo mảng 2 chiều:</p>

<figure>
<pre>
<code data-lang="c++">int arr&#91;&#93;&#91;&#93; = {
{1, 2, 3},
{2, 3, 4}
};</code></pre>
</figure>

<h1 id="bài-tập-áp-dụng-quy-hoạch-động"><br  />
<br  />
<br  />
<br  />
<br  />
Bài tập áp dụng: Quy hoạch động</h1>

<p>Quy hoạch động (Dynamic Programming, gọi tắt là DP) là một phương pháp giải quyết các vấn đề trong toán học, tin học và kinh tế, bằng cách chia nhỏ vấn đề ra và tính toán các kết quả của trường hợp lớn hơn bằng kết quả của các trường hợp nhỏ hơn. Mảng là một công cụ đắc lực để giải các bài toán DP, và ta sẽ áp dụng nó ở trong ví dụ kế tiếp.</p>

<p><em>Các bạn cũng có thể tìm kiếm các bài toán quy hoạch động khác thông qua tag&nbsp;<a href="http://cowboycoder.tech/tags/dp" target="_blank">dp</a>&nbsp;trên trang Cowboy Coder.</em></p>

<h2 id="đề-bài">Đề bài</h2>

<p>Cho một dãy số nguyên&nbsp;AA&nbsp;có&nbsp;nn&nbsp;phần tử (n&lt;=1000n&lt;=1000). Hãy tìm số lượng phần tử lớn nhất trên dãy&nbsp;AA, sao cho khi giữ nguyên thứ tự của các phần tử này như trên dãy số gốc, thì phần tử sau lớn hơn phần tử trước. Các phần tử không nhất thiết phải kề nhau.</p>

<p>Bài toán này còn được gọi là bài toán dãy con tăng dài nhất (Longest Increasing Subsequence - LIS)</p>

<p><strong>Input</strong></p>

<p>Đọc từ file&nbsp;<code>INPUT.TXT</code>. Dòng đầu tiên của file là một số&nbsp;nn&nbsp;- số lượng phần tử của dãy số&nbsp;AA. Dòng tiếp theo có&nbsp;nn&nbsp;số nguyên là các phần tử của dãy số&nbsp;AA.&nbsp;n≤103n≤103, các số thuộc dãy&nbsp;AA&nbsp;thuộc kiểu&nbsp;<code>int</code>.</p>

<p><strong>Output</strong></p>

<p>Viết ra file&nbsp;<code>OUTPUT.TXT</code>&nbsp;một số nguyên duy nhất là số lượng phần tử lớn nhất tìm được.</p>

<p><strong>Ví dụ</strong></p>

<pre>
<code>INPUT.TXT
5
1 3 2 4 5
</code></pre>

<pre>
<code>OUTPUT.TXT
4
</code></pre>

<h2 id="cách-giải">Cách giải</h2>

<p>Ta định nghĩa hàm số&nbsp;f(i)f(i)&nbsp;là số lượng phần tử lớn nhất có thể lựa chọn được, nếu ta lấy phần tử thứ&nbsp;ii&nbsp;là phần tử cuối cùng được chọn. Kết quả của bài toán sẽ là giá trị lớn nhất của các&nbsp;f(x)f(x)&nbsp;từ 1 tới n.</p>

<p>Khi ta lấy phần tử thứ&nbsp;xx&nbsp;làm phần tử cuối cùng, có hai trường hợp xảy ra</p>

<ul>
	<li>Nếu chỉ có phần tử&nbsp;xx&nbsp;được chọn, độ dài của dãy sẽ là 1</li>
	<li>Nếu như có phần tử&nbsp;yy&nbsp;được chọn ở vị trí áp chót trước phần tử&nbsp;xx, độ dài của dãy&nbsp;xx&nbsp;sẽ bằng&nbsp;f(y)+1f(y)+1&nbsp;(do có thêm phần tử&nbsp;xx)</li>
</ul>

<p>Vậy với mỗi phần tử&nbsp;xx, ta đặt&nbsp;f(x)=1f(x)=1, và duyệt qua các phần tử&nbsp;ii&nbsp;từ 1 tới&nbsp;x−1x−1. Nếu&nbsp;a&#91;i&#93;&lt;a&#91;x&#93;a&#91;i&#93;&lt;a&#91;x&#93;&nbsp;và&nbsp;f(i)+1&gt;f(x)f(i)+1&gt;f(x), ta cập nhật giá trị của&nbsp;f(x)f(x)&nbsp;bằng giá trị mới.</p>

<figure>
<pre>
<code data-lang="c++">f&#91;x&#93; = 1;
for (int i = 1; i &lt; x; i ++)
        if (a&#91;i&#93; &lt; a&#91;x&#93; &amp;&amp; f&#91;i&#93; + 1 &gt; f&#91;x&#93;)
            f&#91;x&#93; = f&#91;i&#93; + 1;</code></pre>
</figure>

<h2 id="code-mẫu"><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Code mẫu</h2>

<figure>
<pre>
<code data-lang="c++">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;
int n, a&#91;1003&#93;, f&#91;1003&#93;, answer = 0;

int main()
{
    // Mở file input và output
    ifstream input; input.open(&quot;INPUT.TXT&quot;);
    ofstream output; output.open(&quot;OUTPUT.TXT&quot;);

    // Đọc vào dữ liệu đề bài
    input &gt;&gt; n;
    for (int i = 1; i &lt;= n; i ++)
        input &gt;&gt; a&#91;i&#93;;

    // Tính toán mảng f&#91;&#93;
    for (int x = 1; x &lt;= n; x ++)
    {
        f&#91;x&#93; = 1;
        for (int i = 1; i &lt; x; i ++)
            if (a&#91;i&#93; &lt; a&#91;x&#93; &amp;&amp; f&#91;i&#93; + 1 &gt; f&#91;x&#93;)
                f&#91;x&#93; = f&#91;i&#93; + 1;

        // Nếu như f&#91;x&#93; lớn hơn đáp án, ta cập nhật đáp án
        if (f&#91;x&#93; &gt; answer)
            answer = f&#91;x&#93;;
    }

    // In ra đáp án
    output &lt;&lt; answer;
    return 0;
}</code></pre>
</figure>

<p><br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
<br  />
Bài toán này còn có cách giải nhanh hơn, nhưng trong khuôn khổ của bài viết này, chúng ta sẽ chỉ tìm hiểu cách làm này.</p>

<p><em>Phần sau:&nbsp;&#91;C++ Cơ bản&#93; Phần 15: Các giá trị kiểu số. Thư viện toán học cmath.</em></p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả bài viết:</strong>
				Thanh Sơn
			</p>
						<p>
				<strong>Nguồn tin:</strong>
				cowboycoder.tech
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-14-mang-array-108.html" title="&#91;C++ Cơ bản&#93; Phần 14&#x3A; Mảng - Array">https://tinhocdct.xyz/hoat-dong-chuyen-mon/c-co-ban-phan-14-mang-array-108.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG
		</div>
		<div id="contact">
			<a href="mailto:webmaster@tinhocdct.xyz">webmaster@tinhocdct.xyz</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://tinhocdct.xyz/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_is_recaptcha=0;</script>
<script src="https://tinhocdct.xyz/assets/js/language/vi.js"></script>
<script src="https://tinhocdct.xyz/assets/js/global.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/news.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/main.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198"
     crossorigin="anonymous"></script>
<script src="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js"></script>
</body>
</html>