

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Trước hết, mình thấy là nếu giá trị của phần quà là K, thì giá trị của mỗi món đồ chơi trong một phần quà sẽ là K/2 (nếu K là số chẵn) hoặc (K-1)/2 (nếu K là số lẻ).
Sau đó mình sẽ chạy một lượt k từ lớn đến nhỏ và kiểm tra bao nhiêu phần quà với giá trị K đó.
Mình sẽ dùng 1 mảng đếm để đếm số lượng món đồ chơi có giá trị tương ứng với giá trị của mỗi món trong phần quà. Với mỗi giá trị K, mình sẽ tính được số phần quà có thể đóng gói bằng cách duyệt qua các giá trị của mảng đếm và tính tổng các cặp đồ chơi có giá trị tương ứng
Code:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
// Tao vector dem so do choi co gia tri = voi gia tri moi mon trong qua
vector<int> dem(k, 0);
for (int i = 1; i <= n; i++) {
dem[i % k]++;
}
int Max = 0;
// Chay K tu lon den nho
for (int i = k-1; i > 0; i--) {
int qua = 0;
// Tinh so phan qua dong goi duoc
for (int j = 1; j <= i/2; j++) {
qua += min(dem[j], dem[i-j]);
}
if (i % 2 == 0) {
qua += dem[i/2]/2;
}
Max = max(Max, qua);
}
cout << Max << endl;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
#include<bits/stdc++.h>
#define ll long long
#define db double
#define str string
#define fi first
#define se second
#define mod 1000000007
#define inf INFINITY
#define maxn 100000
#define si size()
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//freopen(".inp","r",stdin);
//freopen(".out","w",stdout);
ll n,k;
cin>>n>>k;
if(n>=k-1)
{
cout<<(k-1)/2;
}
else
{
if(k%2==0)
{
cout<<min(n-k/2,k/2+1);
}
else
{
cout<<min(n-k/2,k/2);
}
}
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin