Một máy ATM hiện có n < = 20 tờ tiền có giá t1, t2.t3…tn. Hãy đưa ra mộtcách trả với số tiền đúng bằng
s. Dữ liệu vào từ file “ATM.INP” có dạng:
- Dòng đầu là 2 số n và s.
- Dòng thứ 2 gồm ’ số t1, t2…tn.
Kết quả ra file “ATM.OUT” có dạng: Nếu có thể trả đúng thì đưa ra cách trả, nếu không ghi -1.
ATM.INP10 390 200 10 20 20 50 50 50 50 100 100ATM.OUT
20 20 50 50 50 100 100
#include<bits/stdc++.h>
#define nmax 100100
#define ll long long
using namespace std;
ll atm[nmax];
ll rut[nmax];
ll danhdau[nmax];
ll n,sn;
ll s,sum;
void inkq()
{
for(int i=1; i<=n; i++)
{
//cout << danhdau[i]<<" ";
}
}
void backtrack(ll index)
{
if(sn)
{
return ;
}
for(int j=0; j<=1; j++)
{
danhdau[index]=j;
sum+=j*atm[index];
if(index==n)
{
if(sum==s)
{ sn++;
inkq();
}
}
else
{
backtrack(index+1);
}
sum=sum-j*atm[index];
}
cout << index <<endl;
}
int main()
{ sn=0;
cin>>n>>s;
for(int i=1; i<=n; i++)
{
cin>>atm[i];
}
backtrack(1);
}
Đây là bài máy rút tiền atm. Cho em hỏi là tại sao khi index==n ấy tức là index==10 ấy thì tại sao nó lại quay về bằng 9 ạ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?