零钱问题
设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱,可以实用的各种面值的硬币个数不限。当只用硬币面值T[1],T[2],…,T[i]时,可找出钱数j的最少硬币个数记为C(i,j)。若若只用这些硬币面值,找不出钱数j时,记C(i,j)=∞:
vector<vector<int>>c(t.size()+1,vector<int>(n+1,0));
for(int j=1;j<=n;j++)
{
if(j%t[1]==0)
c[1][j]=j/t[1];
else
c[1][j]=INT_MAX;
}
for(int i=2;i<=t.size();i++)
for(int j=1;j<=n;j++)
{
if(j>=0&&j<t[i])
c[i][j]=c[i-1][j];
else
c[i][j]=min(c[i-1][j],c[i][j-t[i]]+1);
}
return c[t.size()][n];