K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

15 tháng 6 2023

Dựa vào yêu cầu bài toán, ta có thể giải quyết bài toán này bằng phương pháp quay lui đệ quy. Ý tưởng cơ bản như sau:

1. Để đảm bảo rằng đứa lớn hơn luôn ít kẹo hơn đứa bé hơn, ta có thể sắp xếp mảng K em theo thứ tự tăng dần.
2. Sử dụng một hàm đệ quy để chia kẹo cho các em:
   - Với mỗi em, ta thử tất cả các số kẹo có thể chia được từ 1 đến N, đồng thời giới hạn số kẹo không được vượt quá số kẹo hiện có và số kẹo của em trước đó. Sau đó, ta đệ quy chia kẹo cho các em tiếp theo.
   - Khi đã chia hết kẹo cho K em, ta kiểm tra xem có phải cách chia kẹo hợp lệ theo yêu cầu của bài toán không.
   - Nếu hợp lệ, tăng biến đếm số lượng cách chia lên.
3. Kết quả cuối cùng là số lượng cách chia kẹo hợp lệ.

---------
 

def count_ways(N, K, candies, current_index, current_count, current_sum):
    # Đã chia hết kẹo cho K em
    if current_index == K:
        # Kiểm tra xem cách chia có hợp lệ không
        if current_sum == N:
            return 1
        else:
            return 0

    # Đệ quy chia kẹo cho em tiếp theo
    ways = 0
    for i in range(1, candies[current_index] + 1):
        if current_sum + i <= N and current_count + i <= candies[current_index]:
            ways += count_ways(N, K, candies, current_index + 1, current_count + i, current_sum + i)

    return ways


# Đọc dữ liệu từ file input
with open('CANDY.INP', 'r') as file:
    N, K = map(int, file.readline().split())

    # Đọc số lượng kẹo của từng em
    candies = []
    for _ in range(K):
        candies.append(int(file.readline()))

# Gọi hàm đệ quy để tính số lượng cách chia kẹo hợp lệ
ways = count_ways(N, K, candies, 0, 0, 0)

# Ghi kết quả vào file output
with open('CANDY.OUT', 'w') as file:
    file.write(str(ways))

hùng và dũng là hai anh em, hùng là anh và dũng là em. nhân ngày quốc tế thiếu nhi, mẹ mua gói kẹo cho hai anh em. vấn đề hóc búa là chia các gói kẹo này. để kiểm tra độ thông minh của hai con, mẹ đưa ra yêu cầu chia theo qui tắc: hai anh em chọn một số gói kẹo sao cho có thể chia thành hai phần với số lượng kẹo trong mỗi phần bằng nhau và tổng số kẹo trong các gói không được chia là nhỏ nhất có thể. số kẹo...
Đọc tiếp

hùng và dũng là hai anh em, hùng là anh và dũng là em. nhân ngày quốc tế thiếu nhi, mẹ mua gói kẹo cho hai anh em. vấn đề hóc búa là chia các gói kẹo này. để kiểm tra độ thông minh của hai con, mẹ đưa ra yêu cầu chia theo qui tắc: hai anh em chọn một số gói kẹo sao cho có thể chia thành hai phần với số lượng kẹo trong mỗi phần bằng nhau và tổng số kẹo trong các gói không được chia là nhỏ nhất có thể. số kẹo trong các gói không được chia mẹ sẽ dành cho dũng ( em - bé hơn!!! ). hỏi rằng tổng số kẹo mà dũng nhận được là bao nhiêu? input dòng đầu tiên ghi số nguyên dương số gói kẹo mà mẹ mua dòng tiếp theo, dòng thứ ghi là số kẹo có trong gói thứ . tổng số kẹo trong gói kẹo không vượt quá . output số kẹo mà dũng nhận được. sample input copy 5 2 3 5 8 13 sample output copy 18.c++ giúp mình với ạ

3
17 tháng 11 2023

"quy tắc" còn viết sai chính tả là "qui tắc" nữa.

17 tháng 11 2023

mình lấy từ vnoi ra

13 tháng 10 2021

T cũng hỏi mà méo ai trả lời

 

17 tháng 11 2023

Quy tắc còn viết là qui tắc

const fi='divk.inp';

fo='divk.out';

var f1,f2:text;

a:array[1..100]of integer;

i,n,k,dem,j,x,t:integer;

begin

assign(f1,fi); reset(f1);

assign(f2,fo); rewrite(f2);

readln(f1,n,k);

for i:=1 to n do 

  read(f1,a[i]);

dem:=0;

for i:=1 to n do 

  for j:=1 to n do 

begin

if i<j then 

begin

t:=0;

for x:=i to j do 

  t:=t+a[x];

if t=k then inc(dem);

end;

for i:=1 to n do 

  if k=a[i] then inc(dem);

writeln(f2,dem);

close(f1);

close(f2);

end.

15 tháng 10 2022

#include <bits/stdc++.h>
using namespace std;
#define nhungcute ios_base::sync_with_stdio; cin.tie(0); cout.tie(0);
const int N=1500;
long long n,k,a[N],i,j,c[N][101];
int main(){
nhungcute
    cin>>n>>k;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<=n;i++){
        a[i]=a[i]%k;
    }
    for(i=1;i<k;i++)
    c[1][i] =-1e9;
    c[1][a[0]]=0;
    c[1][a[1]]=1;
    for(i=2;i<=n;i++){
        for(j=0;j<k;j++){
        c[i][j]=max(c[i-1][j],c[i-1][(j-a[i]+k)%k]+1);
        }
    }
    cout<<c[n][0];
    return 0;
}

 

#include <bits/stdc++.h>

using namespace std;

long long a[1000],n,i;

int main()

{

freopen("dayd.inp","r",stdin);

freopen("dayd.out","w",stdout);

cin>>n;

for (i=1; i<=n; i++) cin>>a[i];

for (i=1; i<=n; i++)

if (a[i]>0) cout<<a[i]<<" ";

return 0;

}

27 tháng 12 2021

Chọn A