zoukankan      html  css  js  c++  java
  • POJ 3260 多重背包+完全背包

    链接:

    http://poj.org/problem?id=3260

    题意:

    你去买总价为t的东西,每种硬币你有k枚,老板有无数枚,求硬币交换数目最少的数目

    题解:

    你是多重背包,老板是完全背包,先预处理一下,然后计算取总和最小的就行了

    代码:

    31 int v[MAXN], c[MAXN];
    32 int dp1[MAXN], dp2[MAXN];
    33 int sum[MAXN];
    34 
    35 int main() {
    36     int n, t;
    37     cin >> n >> t;
    38     rep(i, 1, n + 1) cin >> v[i];
    39     rep(i, 1, n + 1) cin >> c[i];
    40     memset(dp1, 0x3f, sizeof(dp1));
    41     dp1[0] = 0;
    42     rep(i, 1, n + 1) {
    43         memset(sum, 0, sizeof(sum));
    44         rep(j, v[i], MAXN) if (dp1[j - v[i]] != INF && sum[j - v[i]] < c[i] && dp1[j] > dp1[j - v[i]] + 1)
    45             dp1[j] = dp1[j - v[i]] + 1, sum[j] = sum[j - v[i]] + 1;
    46     }
    47 
    48     memset(dp2, 0x3f, sizeof(dp2));
    49     dp2[0] = 0;
    50     rep(i, 1, n + 1) rep(j, v[i], MAXN) dp2[j] = min(dp2[j], dp2[j - v[i]] + 1);
    51     int ans = INF;
    52     rep(i, t, MAXN) ans = min(ans, dp1[i] + dp2[i - t]);
    53     if (ans == INF) ans = -1;
    54     cout << ans << endl;
    55     return 0;
    56 }
  • 相关阅读:
    贴图UV动画
    编辑器开发读取LIGHTMAP的脚本
    一个角色旋转身体在向前行走的代码
    第一周
    《大道至简》读后感
    第二周
    Easyui,好的设计思路
    有关反射
    Easyui表格的行编辑
    冒泡排序
  • 原文地址:https://www.cnblogs.com/baocong/p/6783375.html
Copyright © 2011-2022 走看看