https://codeforces.com/problemset/problem/996/A
Jest taki problem, no i rozwiazalem go greedy approachem:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int c=0;
while (n>0)
{
if (n-100>=0)
{
n-=100;
c++;
}
else if (n-20>=0)
{
n-=20;
c++;
}
else if (n-10>=0)
{
n-=10;
c++;
}
else if (n-5>=0)
{
n-=5;
c++;
}
else if (n-1>=0)
{
n-=1;
c++;
}
}
cout<<c;
}
ale tez chcialem jak szef, i uzyc dynamic programming i mam tak:
#include <iostream>
using namespace std;
int main()
{
long long int n;
cin>>n;
long long int dp[n];
dp[0]=0;
int coins[5]={1,5,10,20,100};
for (long long i=1; i<n; i++)
dp[i]=n+1;
for (long long i=1; i<=n; i++)
for (int j:coins)
if (i<j)
continue;
else
dp[i]=min(dp[i], dp[i-j]+1);
cout<<dp[n];
}
no dalem wszedzie long longa zamiast inta ale i tak test:
1000000000
crashuje, domyslam sie ze nie moge tworzyc tak duzych tablic, jak sobie z tym poradzic?