栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3260 The Fewest Coins

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3260 The Fewest Coins

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int v[105],c[105],MAX,n,sum;int dp[33333],inf = 100000000;void ZeroonePack(int cost,int cnt){    int i;    for(i = sum+MAX; i>=cost; i--)        dp[i] = min(dp[i],dp[i-cost]+cnt);}void CompletePack(int cost,int cnt){    int i;    for(i = sum+MAX+cost; i>=0; i--)        dp[i] = min(dp[i],dp[i-cost]+cnt);}int MultiplePack(){    int i,j,k;    for(i = 1; i<=sum+MAX; i++)        dp[i] = inf;    dp[0] = 0;    for(i = 1; i<=2*n; i++)    {        if(i<=n)        { k = 1; while(k<c[i]) {     ZeroonePack(k*v[i],k);     c[i]-=k;     k*=2; } ZeroonePack(c[i]*v[i],c[i]);        }        else CompletePack(-v[i-n],1);    }    if(dp[sum]==inf)        return -1;    else        return dp[sum];}int main(){    int i;    while(~scanf("%d%d",&n,∑))    {        MAX = 0;        for(i=1; i<=n; i++)        { scanf("%d",&v[i]); MAX = max(MAX,v[i]);        }        MAX*=MAX;        for(i=1; i<=n; i++) scanf("%d",&c[i]);        printf("%dn",MultiplePack());    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号