Codeforce 106C Buns (完全背包)

题意:

    现在有nkg的面,和m种馅,如果是只买面做的馒头,c0kg面,做一个d0价值的馒头。

m种馅有a,b,c,d四种属性,a馅的量,b制作一个这种面包需要的馅的量,c是需要面的量,d是该种面包能卖多少钱。

问最多能销售多少钱。

分析:

    贪心考虑第一时间否定。

动态规划:考虑与结果相关的参数。面的质量i,使用了前j种馅,一共做了k个j馅。

d(i,j,k)就是我们要的答案。

状态转移:

    

for(int i=0;i<m;i++){
        for(int j=1;j<=x[i].a/x[i].b;j++){
            for(int k=n;k>=x[i].c;k--){
                dp[k]=max(dp[k],dp[k-x[i].c]+x[i].d);

            }
        }
    }

完整代码:

    

#include<bits/stdc++.h>
using namespace std;
#define N 10005
struct Node{
    int a,b,c,d;
}x[N];
int dp[N];
int main(){
    int n,m,c,d;
    cin>>n>>m>>c>>d;

    for(int i=0;i<m;i++){
        cin>>x[i].a>>x[i].b>>x[i].c>>x[i].d;
    }

    for(int i=0;i<=n;i++)dp[i]=(i/c)*d;
    for(int i=0;i<m;i++){
        for(int j=1;j<=x[i].a/x[i].b;j++){
            for(int k=n;k>=x[i].c;k--){
                dp[k]=max(dp[k],dp[k-x[i].c]+x[i].d);

            }
        }
    }
    cout<<dp[n];
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lj130lj/article/details/79968747
个人分类: Codeforce 动态规划
上一篇Codeforce 106B Choosing Laptop
下一篇Codeforces 935A Fafa and his Company
想对作者说点什么? 我来说一句

几道有关钱币的背包问题分析

2016年04月05日 34KB 下载

算法九讲2.0

2018年05月09日 233KB 下载

背包问题九讲

2012年06月15日 63KB 下载

背包九讲——修正版

2012年02月26日 39KB 下载

hdu_WHUgirls

2011年04月15日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭