| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1873 人关注过本帖, 1 人收藏
标题:最少硬币数 代码 求注释
取消只看楼主 加入收藏
学跑步的少年
Rank: 1
等 级:新手上路
帖 子:39
专家分:5
注 册:2018-3-6
结帖率:83.33%
收藏(1)
已结贴  问题点数:2 回复次数:1 
最少硬币数 代码 求注释
#include<iostream>  
using namespace std;  
  
int V[20];  
int n, S;   
int minv[200],maxv[200];  
int d[200]={0},vis[200] = {0};  
  
int min(int x, int y)  
{  
    return x < y ? x : y;  
}  
  
int dp(int S)  
{   
    if(S == 0) return 0;  
    if(vis[S]) return d[S];  
    int &ans = d[S];  
    ans = (1<<30);  
    for(int i = 0; i < n; i++)  
        if(S >= V[i])   
            ans = min(ans, dp(S - V[i]) + 1);  
    return ans;  
}  
  
void print_ans(int *d, int S){  
    for(int i = 0; i < n; i++)  
        if(S >= V[i] && d[S] == d[S - V[i]] + 1){  
            cout << V[i] << ' ';  
            print_ans(d, S - V[i]);  
            break;  
        }  
}  
  
int main()  
{  
    minv[0] = maxv[0] = 0;  
    cout << "输入硬币种数:";   
    cin >> n;  
    cout << "依次输入其面值:" << endl;  
    for(int i = 0; i < n; i++)  
        cin >> V[i];  
    cout << "输入要凑的总面值:";  
    cin >> S;  
    cout << "最少需要的硬币数为:" << dp(S) << endl << "它们分别是:";  
    print_ans(d, S);  
    return 0;   
}  
搜索更多相关主题的帖子: 注释 int return i++ cout 
2018-03-07 19:16
学跑步的少年
Rank: 1
等 级:新手上路
帖 子:39
专家分:5
注 册:2018-3-6
收藏
得分:0 
回复 楼主 学跑步的少年
。。有c语言的代码没,。大佬。
2018-03-07 20:25
快速回复:最少硬币数 代码 求注释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037925 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved