码迷,mamicode.com
首页 > 其他好文 > 详细

DAG动态规划-硬币问题

时间:2018-05-08 22:20:39      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:ace   cout   main   ons   include   dag   out   its   bit   

#include <bits/stdc++.h>

using namespace std;
int n, m, t;
const int INF = 0x3f3f3f3f;
int a[1005],Max[1005],Min[1005];
void dfs(int *d, int s)
{
    for(int i=1; i<=n; i++)
    if(s>=a[i] && d[s] == d[s-a[i]]+1){
        printf("%d ",i);
        dfs(d,s-a[i]);
        break;
    }
}

int main()
{
    cin >> n >> m;
    for(int i=1;i<=n; i++) cin>>a[i];
    for(int i=1;i<=m;i++){
        Min[i]=INF;
        Max[i]=-INF;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(i >= a[j]){
                Max[i] = max(Max[i-a[j]]+1,Max[i]);
                Min[i] = min(Min[i-a[j]]+1,Min[i]);
            }
        }
    }
    cout << Max[m] <<' '<< Min[m] << endl;
    dfs(Max,m);
    cout<<endl;
    dfs(Min,m);
}
/*
3 8
1 2 4
*/
#include <bits/stdc++.h>

using namespace std;
int n, m, t;
const int INF = 0x3f3f3f3f;
int a[1005],Max[1005],Min[1005],Max_[1005],Min_[1005];
void dfs(int *d, int s)
{
    for(int i=1; i<=n; i++)
    if(s>=a[i] && d[s] == d[s-a[i]]+1){
        printf("%d ",i);
        dfs(d,s-a[i]);
        break;
    }
}
void print(int *d, int s)
{
    while(s){
        printf("%d ",d[s]);
        s -= a[d[s]];
    }
}
int main()
{
    cin >> n >> m;
    for(int i=1;i<=n; i++) cin>>a[i];
    for(int i=1;i<=m;i++){
        Min[i]=INF;
        Max[i]=-INF;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(i >= a[j]){
                if(Min[i] > Min[i-a[j]]+1){
                    Min[i] = Min[i-a[j]]+1;
                    Min_[i] = j;
                }
                if(Max[i] < Max[i-a[j]]+1){
                    Max[i] = Max[i-a[j]]+1;
                    Max_[i] = j;
                }
            }
        }
    }
    cout << Max[m] <<' '<< Min[m] << endl;
    //dfs(Max,m);
    print(Max_,m);
    cout<<endl;
    //dfs(Min,m);
    print(Min_,m);
}
/*
3 8
1 2 4
*/

DAG动态规划-硬币问题

标签:ace   cout   main   ons   include   dag   out   its   bit   

原文地址:https://www.cnblogs.com/Roni-i/p/9010975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!