Hệ sinh thái số IELP
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Hệ sinh thái số IELP

Học lập trình với Hệ sinh thái số IELP
 
Trang ChínhTrang Chính  CalendarCalendar  Latest imagesLatest images  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Keywords
hình Phạm điểm Thành HOAI được chứa sach nhật thưởng giác tổng sinh 2022 pháp phương đặng Minh BANG Hoàng Nhàn nguyễn tích Trần wavio Phần
Latest topics
» Buổi học số 1. Cấu trúc tuần tự trong C++ (Bài 1 -> Bài 15)
tích - T.18 Dãy con có tích lớn nhất EmptyThu Apr 25, 2024 10:49 am by quanle1120

» Chấm bài trực tuyến với Jusolan.ddns.net
tích - T.18 Dãy con có tích lớn nhất EmptyWed Apr 24, 2024 9:15 pm by Admin

» Bài kiểm tra giữa Học kỳ II
tích - T.18 Dãy con có tích lớn nhất EmptyWed Apr 05, 2023 8:00 am by Nguyễn Đức Mạnh

» Bài giữa kì 2
tích - T.18 Dãy con có tích lớn nhất EmptyMon Apr 03, 2023 8:34 am by Khách viếng thăm

» Bài giữa kì tin Lê Đức Anh
tích - T.18 Dãy con có tích lớn nhất EmptySun Apr 02, 2023 8:33 pm by Tendalda06

» Nghiêm Tuấn Tú
tích - T.18 Dãy con có tích lớn nhất EmptySat Apr 01, 2023 9:03 am by Nghiêm Tuấn Tú

» Nguyễn Trần Ý Nhi
tích - T.18 Dãy con có tích lớn nhất EmptySat Apr 01, 2023 8:23 am by Nguyễn Trần Ý Nhi

» Nguyễn Kim Anh
tích - T.18 Dãy con có tích lớn nhất EmptySat Apr 01, 2023 12:05 am by Khách viếng thăm

» Trần Thanh Trà
tích - T.18 Dãy con có tích lớn nhất EmptyFri Mar 31, 2023 11:10 pm by Trần Thanh Trà

May 2024
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendarCalendar
Top posting users this week
No user

Gửi bài mới   Trả lời chủ đề này
 

 T.18 Dãy con có tích lớn nhất

Go down 
+2
vhdlinh
Admin
6 posters
Tác giảThông điệp
Admin
Admin



Tổng số bài gửi : 152
Join date : 23/04/2022
Age : 41
Đến từ : THPT Chuyên Nguyễn Tất Thành - Yên Bái

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptySun May 15, 2022 9:12 am

T.18 Dãy con có tích lớn nhất
Cho N và dãy a1, a2, ..., aN.
Hãy tìm dãy con có tích lớn nhất.
Dữ liệu: Vào từ tệp PERSEQ.INP gồm
Dòng 1: Ghi số nguyên dương N (N <=10^5)
Dòng 2: Ghi N số nguyên a[i] (a[i] <= 10^9).
Kết quả: Ghi ra tệp PERSEQ.OUT giá trị lớn nhất tìm được.
PERSEQ.INP
5
-1 2 -4 -5 3
PERSEQ.OUT
120
Về Đầu Trang Go down
https://ielp.forumvi.com
vhdlinh




Tổng số bài gửi : 34
Join date : 08/05/2022

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 1:22 am

Code:
#include <bits/stdc++.h>
#define nmax 10005

using namespace std;

int n;
int a[nmax];

void find() {
   int best = INT_MIN, s = 1;
   for (int i = 1; i <= n; i++) {
       s = max(a[i], s * a[i]);
       best = max(best, s);
   }
   cout << best << "\n";
}

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
freopen("PERSEQ.INP", "r", stdin);
freopen("PERSEQ.OUT", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
   find();
   return 0;
}

Admin likes this post

Về Đầu Trang Go down
Admin
Admin



Tổng số bài gửi : 152
Join date : 23/04/2022
Age : 41
Đến từ : THPT Chuyên Nguyễn Tất Thành - Yên Bái

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 8:33 pm

Cách 1: Áp dụng phương pháp sinh dãy nhị phân có độ dài N.
Với mỗi cấu hình ta thực hiện:
for(i, 1, n)
 if (b[i] == 1) t*=a[i];
res = max(res, a[i]);

Độ phức tạp của thuật toán: O(2^n)
Video hướng dẫn Cách 1:
Về Đầu Trang Go down
https://ielp.forumvi.com
Admin
Admin



Tổng số bài gửi : 152
Join date : 23/04/2022
Age : 41
Đến từ : THPT Chuyên Nguyễn Tất Thành - Yên Bái

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 9:14 pm

Cách 2: ?
Nếu số lượng phần tử là số âm là chẵn thì return tích tất cả các phần tử.
Còn lại, thực hiện:
Phân rã bài toán:
- Gọi S[i] là tích lớn nhất khi đi đến vị trị i.
+ a[i] có tham gia vào dãy kết quả: s[i-1]*a[i];
+ a[i] không tham gia vào dãy kết quả: a[i];
Tổng hợp lời giải:
- s[i] = max(s[i-1]*a[i], a[i]);

Khi đó kết quả của bài toán:  res = max(res,s[i]);

Cách 3:
- Đọc dữ liệu: Đếm số lượng số âm lưu vào d, tính tích các phần tử lưu vào S.
- Nếu d chẵn thì đưa S ra, kết thúc.
ngược lại,
{
tìm rmax; // số âm lớn nhất trong dãy số.
kq = S / rmax; //không chọn số âm lớn nhất.
đưa kq ra.
}
Đọ phức tạp của thuật toán: O(N).


Được sửa bởi Admin ngày Tue May 17, 2022 9:23 pm; sửa lần 1.
Về Đầu Trang Go down
https://ielp.forumvi.com
hdluong




Tổng số bài gửi : 19
Join date : 09/05/2022

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 9:22 pm

Code này không xử lí được trường hợp 2 số âm bằng nhau ạ :<
Code:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    freopen("perseq.inp","r",stdin);
    freopen("perseq.out","w",stdout);
    cin >> n;
    int dem=0,t=1,vt,am=round(-1e9);
    for (int i=1;i<=n;i++)
    {
        cin >> a[i];
        if (a[i]<0)
        {
            dem++;
            am=max(am,a[i]);
            if (dem%2!=0&&am==a[i]) vt=i;
        }
        t=t*a[i];
    }
    int r1=1,r2=1;
    if (dem%2==0) cout << t; else
    {
        for (int i=1;i<vt;i++) r1=r1*a[i];
        for (int i=n;i>vt;i--) r2=r2*a[i];
        cout << max(r1,r2);
    }
    return 0;
}

Admin likes this post

Về Đầu Trang Go down
kienvu7991




Tổng số bài gửi : 9
Join date : 08/05/2022

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: kien   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 9:27 pm

Code:
#include<bits/stdc++.h>
#define ll long long
#define N 100005
using namespace std;
ll a[N],b[N]; ll res=1; int n,m=0,k=0; bool khong=false;
void inp(){
cin>>n;
for(int i=1; i<=n; i++){
cin>>x;
if(x<0) b[++m]=x;
else if(x>0) a[++k]=x;
else khong=true;
}
}
void solve(){
if(m%2!=0){
sort(b+1,b+m+1);
for(int i=1; i<m; i++) res*=b[i];
for(int i=1; i<=k; i++) res*=a[i];
}else{
for(int i=1; i<=m; i++) res*=b[i];
for(int i=1; i<=k; i++) res*=a[i];
}
if((n<3 && khong && m==1) || n==1 && khong) cout<<0;
else cout<<res;
}
int main(){
freopen("perseq.inp","r",stdin);
freopen("perseq.out","w",stdout);
inp();
solve();
return 0;
}

Admin likes this post

Về Đầu Trang Go down
Admin
Admin



Tổng số bài gửi : 152
Join date : 23/04/2022
Age : 41
Đến từ : THPT Chuyên Nguyễn Tất Thành - Yên Bái

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyTue May 17, 2022 9:28 pm

Video hướng dẫn thuật toán:
Về Đầu Trang Go down
https://ielp.forumvi.com
minhchanthinh




Tổng số bài gửi : 12
Join date : 03/05/2022

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyWed May 18, 2022 12:56 am

Code:

#include <bits/stdc++.h>
#define N 100007
#define ll long long
#define INF 1000000100

using namespace std;

int n, M = -INF;
ll res = 1;

int main () {
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    freopen ("PERSEQ.INP", "r", stdin);
    freopen ("PERSEQ.OUT", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        int x;
        cin >> x;
        if (x != 0) {
            res *= x;
            if (x < 0) M = max(M, x);
        }
    }
    if (res >= 0) cout << res;
        else cout << res / M;
    return 0;
}

Admin likes this post

Về Đầu Trang Go down
hientm495




Tổng số bài gửi : 27
Join date : 10/05/2022

tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất EmptyMon May 23, 2022 3:47 pm

#include <bits/stdc++.h>
#define nmax 100007
#define For(i, a, b) for(int i = a ; i <= b ; i++)

using namespace std;

long long a[nmax], n;

void find()
{
vector<int> am;
vector<int> duong;
For(i, 1, n)
if(a[i] < 0) am.push_back(a[i]);
else if(a[i] > 0) duong.push_back(a[i]);
long long s = 1;
if(am.size() % 2 == 0)
For(i, 1, n) s *= a[i];
else
{
sort(am.begin(), am.end());
For(i, 0, am.size()-2) s *= am[i];
For(i, 0, duong.size()-1) s *= duong[i];
}
cout << s;
}

int main()
{
freopen("PERSEQ.inp","r",stdin);
freopen("PERSEQ.out","w",stdout);
cin >> n;
For(i, 1, n) cin >> a[i];
find();
return 0;
}

Admin likes this post

Về Đầu Trang Go down
Sponsored content





tích - T.18 Dãy con có tích lớn nhất Empty
Bài gửiTiêu đề: Re: T.18 Dãy con có tích lớn nhất   tích - T.18 Dãy con có tích lớn nhất Empty

Về Đầu Trang Go down
 
T.18 Dãy con có tích lớn nhất
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» KTLT 10) TÍCH CÁC CHỮ SỐ
» Bài 2: Chu vi và diện tích tam giác ABC
» Bài 30: Giá trị nhỏ nhất
» Đào Nhật Anh
» bài 19 giá trị nhỏ nhất

Permissions in this forum:Bạn được quyền trả lời bài viết
Hệ sinh thái số IELP :: Thực nghiệm phần C++ :: 9-Qui hoạch động-
Gửi bài mới   Trả lời chủ đề nàyChuyển đến