剑指offer-6元人民币有多少种表示方法

2016/05/24 C和C++基础

题目描述

有6元人民币,人民币币值有1元,2元,3元,那么一共有多少种表示方法。

思路:

     1  2  3  4  5  6     //标号为i
1    1  1  1  1  1  1     //只用1元的表示方法
3    0  0  1  1  1  2     //使用了3元以后的新方法 d[3元][i]=d[old][i-3]
5    0  0  0  0  1  1     //使用了5元以后的新方法
old  1  1  2  2  3  4   
#include <iostream>
#include <vector>

using namespace std;

int coutNum(vector<int> vec,int num){   //vec是人民币的币值  num是要表示的钱数
	int len=vec.size();
	vector<int> temp(num,0);
	vector<vector<int> > v;       //创建二维数组
	for(int i=0;i<=len;i++)
		v.push_back(temp);
	for(int i=0;i<num;i++)        //第一行初始化为1
		v[0][i]=1;
	for(int i=1;i<len;i++){       //每一种币值开始计算
		for(int j=1;j<=num;j++){
			if(vec[i]>j)
				v[i][j-1]=0;
			else if(vec[i]==j)
				v[i][j-1]=1;
			else
				v[i][j-1]=v[len][j-vec[i]-1];
			v[len][j-1]=0;
			for(int x=0;x<=i;x++)
				v[len][j-1]+=v[x][j-1];
		}
	}
	return v[len][num-1];
}

int main(){
	int num=5;
	const int n=3;
	int a[n]={1,3,5};
	vector<int> vec(a,a+n);
	cout<<coutNum(vec,num)<<endl;

	system("pause");
}

Search

    Post Directory