悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191 (多重背包)

本文主要是介绍悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191 (多重背包),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

题目链接:HDU - 2191 

题意:现共有资金n,采购大米,有m种大米,已知每种大米的价格(每袋),重量(每袋),以及库存;问最多能购得多少大米,大米只能按袋买;

思路:每种物品有xi个,是多重背包,可以直接套用多重背包计算,

再者,题目数据很小,可以直接把多重背包转换成01背包;

 

 

多重背包代码:

#include <bits/stdc++.h>
using namespace std;
int dp[110], p[110], h[110], c[110];
int main(){int C;scanf("%d", &C);while(C--){int n, m;scanf("%d%d", &n, &m);for(int i=1; i<=m; i++){scanf("%d%d%d", &p[i], &h[i], &c[i]);}memset(dp, 0, sizeof(dp));for(int i=1; i<=m; i++){if(n<=p[i]*c[i]){for(int j=p[i]; j<=n; j++){dp[j]=max(dp[j], dp[j-p[i]]+h[i]);}}else{int k=1;while(k<=c[i]){for(int j=n; j>=k*p[i]; j--){dp[j]=max(dp[j], dp[j-k*p[i]]+h[i]*k);}c[i]-=k;k<<=1;}for(int j=n; j>=p[i]*c[i]; j--){dp[j]=max(dp[j], dp[j-p[i]*c[i]]+h[i]*c[i]);}}}printf("%d\n", dp[n]);}return 0;
}

 

01背包代码:

#include <bits/stdc++.h>
using namespace std;
int dp[110], p[2100], h[2100];
int main(){int C;scanf("%d", &C);while(C--){int n, m;scanf("%d%d", &n, &m);memset(dp, 0, sizeof(dp));int cnt=0;for(int i=1; i<=m; i++){int pp, hh, cc;scanf("%d%d%d", &pp, &hh, &cc);for(int j=0; j<cc; j++){p[++cnt]=pp;h[cnt]=hh;}}for(int i=1; i<=cnt; i++){for(int j=n; j>=p[i]; j--){dp[j]=max(dp[j], dp[j-p[i]]+h[i]);}}printf("%d\n", dp[n]);}return 0;
}

 

这篇关于悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191 (多重背包)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562444

相关文章

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

Python分解多重列表对象,isinstance实现

“”“待打印的字符串列表:['ft','bt',['ad',['bm','dz','rc'],'mzd']]分析可知,该列表内既有字符对象,又有列表对象(Python允许列表对象不一致)现将所有字符依次打印并组成新的列表”“”a=['ft','bt',['ad',['bm','dz','rc'],'mzd']]x=[]def func(y):for i in y:if isinst

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

hdu 2586 树上点对最近距离 (lca)

,只要知道dis[i][j]=dis[i][root]+dis[j][root]-2*dis[Lca(i,j)][root].   其中root为树的根节点,LCA(i,j)为i,j的最近公共祖先。 所以我们先把所有的询问储存下来,然后离线直接查询。复杂度是o(n+q)的。 VIE #include<cstdio>#include<algorithm>#include<i

A bug‘s life 虫子的生活(带权并查集)

题目链接: 2492 -- A Bug's Life (poj.org) 题目描述: 思路: 带权并查集,处理方法基本与食物链(http://t.csdnimg.cn/fSnRr)相同,没什么思维创新 但是一开始WA了几次,有些细节没有注意好,还是需要静下心来,好好分析问题,需要警惕! 参考代码: //#include<bits/stdc++.h>#include<iostream

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{移除元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦,然后流了一身汗,然后没起来,九点多才起床背书。十点钟才开始把昨天那道题题目过一遍,然后十一点才开始复习题目,为了不耽误下午的时间,所以这里的就单纯做已经做过的题目,主打一个有量,不在学

采药问题 01背包

Description:辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

如何用动态规划解决0-1背包问题(C语言实现)

对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制前提下,背包中物品总重量的最大值是多少?假设此时是5个物品,2,2,4,6,3,然后背包最大承载两是9. 假如我们使用回溯算法解决该问题, 代码如下 int maxW = 0; //最大重量int n = 5; //物品数目int w = 9; // 背包最大重量int weight[] = {2,2,4,

组合数学、圆排列、离散数学多重集合笔记

自用 如果能帮到您,那也值得高兴 知识点 离散数学经典题目 多重集合组合 补充容斥原理公式 隔板法题目 全排列题目:

从网易校招编程题谈起,轻松理解有趣的0-1背包问题

从网易的一道算法题开始 最近在准备春招实习,偶然做到网易的一道编程题,一方面找了很多博客看的云里雾里,这里特别写下解题的思路和逻辑,一方面加深印象,另一方面供需要的你学习参考。好了,话不多说,开始吧。本文提供思路,并给出Java代码实现例子,供大家参考。 先睹为快 来源:网易2017春招笔试真题编程题 时间限制:1秒 空间限制:32768K 一种双核CPU的两个核能够同时的处理任务,现在有