#372. SMARTATM - Máy rút tiền thông minh

trần minh hoàng 2021-10-02 4:10:33

mọi người cho em hỏi câu này với ạ. em cảm ơn!!

Tổng cộng 7 trả lời

trần minh hoàng

dạ em cảm dạ em cảm ơn ạ em sẽ tim hiểu thêm

Trùm CUỐI

Khi dùng memset thì phải hiểu bản chất vấn đề, nếu không thì chỉ nên memset giá trị 0 hoặc cùng lằm lá giá trị -1 thôi. Nếu không hiểu rõ cách hoạt động của bộ nhớ thì nên dùng fill_n thay thế.

trần minh hoàng

mình hiểu r cảm ơn b

Nguyễn Hoàng Sơn

memset dùng để set từng byte của một biến.

sizeof thì dùng để đếm số byte của biến đó

1 byte có thể mô tả bằng 2 số hex

Một số int thì có 4 byte

Vì dữ liệu int nhận bit cuối làm bit dấu nên cần tránh bit này ra khi muốn set một giá trị thành một giá trị vô cùng

memset(dp, 0x7f, sizeof dp);

tương đương với

for(int i = 0; i<M; i++) dp[i] = 0x7f7f7f7f;

tương đương với

for(int i = 0; i<M; i++) dp[i] = 2139062143;
trần minh hoàng

cho mình hỏi cái memset đó làm gì v

trần minh hoàng

mình cảm ơn bạn nhiều!!

Nguyễn Hoàng Sơn

Bài này bạn dùng quy hoạch động

int dp[M];
memset(dp, 0x7f, sizeof dp); // 0x7f7f7f7f = 2139062143
dp[0] = 0;
for(int i = 0; i <M; i++){
    for(int j = 1; j<=n; j++){
        if(i + a[j] > M) break;
        dp[i + a[j]] = min(dp[i + a[j]], dp[i] + 1);
    }
}
cout << dp[M];