int main(int argc, char *argv[]) {
long m,n; cin>>m>>n;
cout<
return 0; }
8. 考虑下面的货币兑付问题:在面值为(v1, v2, ?, vn)的n种货币中,需要支付y值的货币,应如何支付才能使货币支付的张数最少,即满足
nn?xvi?1ii?y,且使?xi最小(xi是
i?1非负整数)。设计动态规划算法求解货币兑付问题,并分析时间性能和空间性能。
#include
int a[N][M]; int value[M];
using namespace std;
int main() {
while(true) {
int i,j,k; int x,y,z;
cout<<\输入货币种类的个数:\ cin>>x;
cout<<\从小到大输入货币的价值,其中第一个必须为一:\ for(i=1;i<=x;i++)//x为货币种类的个数 {
cout<<\ cin>>y; value[i]=y; }
cout<<\输入要兑换的钱的价值:\ cin>>z;//z为钱 for(j=0;j<=z;j++) a[j][0]=0;
for(k=0;k<=x;k++) a[0][k]=0; for(i=1;i<=z;i++) {
for(j=1;j<=x;j++) {
if(value[j]==i) a[i][j]=1; else if(value[j]>i) a[i][j]=a[i][j-1]; else
a[i][j]=a[i-value[j]][j]+1;//相当于把乘法换成加法,即碰到一个钱数于
兑换货币自身价值时,返回到
钱数减去该货币值的地方,其值再加1// }//for }
cout<<\兑换的最小货币个数是:\
}//while
return 0; }