zoukankan      html  css  js  c++  java
  • Buns---cf 106C(多重背包)

    题目链接:http://codeforces.com/problemset/problem/106/C

    题意:有n克面粉,m种馅料,然后每种馅料有ai克,bi克馅料和ci克面粉做的面包可以买di元,也可以不放馅料,那么c0克面粉做的面包可以卖d0元,求最多可以赚多少钱;

    不放馅料,那么c0克面粉做的面包可以卖d0元,这句话可以认为是物品的个数不限(即ai/bi很大)的一种物品;

    ai克馅料最多只能做ai/bi个面包,所以可以转化为总费用为 n ,有m+1个物品,每个物品的个数是ai/bi,每个的价值是 di ,花费是 ci,求最大价值;

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <map>
    
    using namespace std;
    
    #define met(a, b) memset(a, b, sizeof(a))
    #define INF 0x3f3f3f3f
    #define N 210
    
    int n, m, c[N], d[N], a[N], b[N], dp[N][N*N];
    int main()
    {
    
        while(scanf("%d %d %d %d", &n, &m, &c[1], &d[1])!=EOF)
        {
            met(dp, 0);
            a[1] = 11000;
            b[1] = 1;
            for(int i=2; i<=m+1; i++)
            {
                scanf("%d %d %d %d", &a[i], &b[i], &c[i], &d[i]);
            }
            for(int i=1; i<=m+1; i++)
            {
                for(int k=0; k<=a[i]/b[i]; k++)
                {
                    for(int j=n; j>=k*c[i]; j--)
                    {
                        dp[i][j] = max(dp[i][j], dp[i-1][j-k*c[i]]+k*d[i]);
                    }
                }
            }
            printf("%d
    ", dp[m+1][n]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    ListView
    ScrollView-电影列表
    ScrollView
    Image组件
    TextInput
    Touchable类组件
    Text
    View
    FlexBox
    StyleSheet
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5261621.html
Copyright © 2011-2022 走看看