|
发表于 2004-6-1 23:54:25
|
显示全部楼层
动态规划方程:
coin = min(coin[i-j]+coin[j]) ; 1<=j<i
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
fstream fin("coin.in");
int final, i, j, tmp;
vector<int> coin; //下标代表钱,纪录得是最少的组合所需的硬币数
fin>>final; //最终要形成的钱
coin.resize(final+1, 1E;
while(fin>>tmp)
coin[tmp] = 1; //形成每个硬币本面值只需一个这样的硬币
//每个i面值的硬币可以由(1,i-1),(2,i-2)......这些面值组成,记录这些组成中所需最少的
//值
for(i = 1 ; i <= final; ++i)
for(j = 1; j < i; ++j)
if(coin[i-j] + coin[j] < coin)
coin = coin[i-j] + coin[j];
cout<<coin[final]<<endl;
return 0;
}
可以找算法书看看 |
|