poj 1252 动态规划 背包

题意:给定6种币值,使用尽量少的硬币,组成1 2 3 4……100,问平均要多少个,以及最多要多少个?

分析:完全背包

 

 

const int M = 1200;

int a[7],f[M],tot,ma;

void dp(int s){
    memset(f,1,sizeof(f));
    f[0] = tot = ma = 0;

    FOE(i, 1, 6) FOE(j, a[i], M) checkmin(f[j], f[ j-a[i] ]+1);//付j

    FOE(i, 1, 100){
        FOE(j, 0, M-i) checkmin(f[i], f[j+i]+f[j]);//付j+i  找j
        tot += f[i];
        checkmax(ma, f[i]);
    }

    cout<<fixed<<setprecision(2)<<(double)tot/100<<' '<<ma<<endl;
}

int main(){
    int t; scanf("%d",&t);
    while(t--){
        FOE(i, 1, 6) scanf("%d",&a[i]);
        dp(100);
    }
    return 0;
}

 

posted @ 2013-06-19 12:51  心向往之  阅读(166)  评论(0编辑  收藏  举报