Chào mọi người, em là thành viên mới của diễn đàn và đang học C++ cơ bản ạ. Dưới đây là chương trình quy hoạch động của em: nhập vào số tiền, đếm số tờ tiền nhỏ nhất tạo thành số tiền đó. Chương trình chạy rất tốt với các số <100
. nhưng khi em nhập sotien >=100
thì nó ra:
Process excited after 2.857 seconds with return value 3221225477.
Press any key to contnue . . .
Số giây thay đổi với các giá trị khác nhưng 3221225477 thì không đổi ạ. Mong các anh chị giải đáp giúp em và góp ý cho em về thuật toán quy hoạch động này với ạ (có thể rút gọn hơn không). Em cảm ơn mọi người ạ.
#include<iostream>
using namespace std;
const int menhgia[]={1,2,5,10,20,50,100}; //mệnh giá các tờ tiền để đổi.
int main()
{
cout<<"nhap so tien: \n";
int sotien;cin>>sotien;
int *ptr=new int [sotien];
// mảng lưu số tờ tiền để tạo thành p đồng.
*ptr=0;
for(int p=1;p<=sotien;p++)
{
int i=p-menhgia[0],min=*(ptr+i),j=1;
while(menhgia[j]<=p)
{
i=p-menhgia[j];
if(*(ptr+i)<min)
{
min=*(ptr+i);
}
j++;
}
*(ptr+p)=min+1; //min+1 là số tờ tiền nhỏ nhất cần để tạo thành p đồng.
}
cout<<"so to tien it nhat la: "<<*(ptr+sotien);
// p=sotien là giá trị cần tìm.
return 0;
}