九度oj 题目1455:珍惜现在,感恩生活
- 题目描述:
-
为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?
- 输入:
-
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
- 输出:
-
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
- 样例输入:
-
1
8 2
2 100 4
4 100 2
- 样例输出:
-
400 以前总想接触一下多重背包问题,今天终于遇到了。
这是一个多重背包问题,简单来讲,就是每个重量的物品不是只有一个,也不是无限个,而是有限数量个
一开始的思路是转换成普通的背包问题来解决,也就是把每类物品当成是一个个的物品
代码如下#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n,m;
int p[];
int w[];
int c[];
int dp[]; int main(int argc, char const *argv[])
{
int C;
//freopen("input.txt","r",stdin);
while(scanf("%d",&C) != EOF) {
while(C--) {
scanf("%d %d",&n,&m);
for(int i = ; i < m; i++) {
scanf("%d %d %d",&p[i],&w[i],&c[i]);
}
memset(dp, , sizeof(dp));
for(int i = ; i < m; i++) {
for(int j = ; j <= c[i]; j++) {
for(int k = n; k >= p[i]; k--) {
dp[k] = max(dp[k],dp[k-p[i]]+w[i]);
}
} }
printf("%d\n",dp[n]);
}
}
return ;
}当然,这个问题还有一些巧妙的解决技巧
比如一件物品有6件,我们假如把它分成1 + 2 +3 件,你会发现,用1,2,3可以凑出任意一个1到6的数
这样的拆分方法是把一个数拆分成2的幂次方的和,如果不能整拆,则最后一个数为差
譬如10可以拆分成1 +2 + 4 + 3
那么我们可以用这些数去构成相应价值的物品
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n,m;
int p[];
int w[];
int c[];
int dp[]; int main(int argc, char const *argv[])
{
int C;
//freopen("input.txt","r",stdin);
while(scanf("%d",&C) != EOF) {
while(C--) {
scanf("%d %d",&n,&m);
int cnt = ;
for(int i = ; i < m; i++) {
int pt,wt,ct;
scanf("%d %d %d",&pt,&wt,&ct);
int c = ;
while(ct - c > ) {
p[cnt] = c * pt;
w[cnt] = c * wt;
ct = ct - c;
cnt++;
c *= ;
}
p[cnt] = ct*pt;
w[cnt] = ct*wt;
cnt++;
}
memset(dp, , sizeof(dp));
for(int i = ; i < cnt; i++) {
for(int k = n; k >= p[i]; k--) {
dp[k] = max(dp[k],dp[k-p[i]]+w[i]);
} }
printf("%d\n",dp[n]);
}
}
return ;
}
九度oj 题目1455:珍惜现在,感恩生活的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- [Eclipse] - 解决"Java was started but returned exit code = 13"问题
最近遇到一个问题,打开Eclipse时会弹出如下对话框 在网上查找了相关资料后结合自己的问题,总结如下. 导致问题的原因: 1. 通常的原因是安装的Eclipse的版本或者Java JDK的版本不匹配 ...
- Win10微软帐户切换不回Administrator本地帐户的解决方法【亲测】
在Win10系统中经常会用到微软帐户登录,如应用商店等地方,不过一些用户反馈原来使用Administrator帐户被绑定微软帐户后无法切换回本地帐户,连[改用本地帐户登录]按钮都没有,那么怎么解决呢? ...
- HDU 5501 The Highest Mark (贪心+DP,经典)
题意: 有n道题目,每道题目的初始分数为Ai,分数每分钟减少Bi,完成此题需要Ci分钟,问在t分钟内最多能获得多少分? 思路: 好题~ 如果没有B的话,就是一道裸的01背包的题目了.每道题目的得分为: ...
- windows7桌面小工具打不开的解决方案
将任务管理器中的sidebar.exe结束任务: 将C:\Users\用户名\AppData\Local\Microsoft\Windows Sidebar下的settings.ini的文件名修改为任 ...
- 为了少点击几次,自己写了一个Chrome插件
缘由 chrome应用商店有三款二维码插件,自己一直使用的第一款.这三款插件有且只有一个功能就是生成当前页面的URL的二维码. 其实这个功能基本上满足了需要移动端开发在微信里打开页面进行调试的情况. ...
- JNI接口的使用(简单版)
详见 http://b6ec263c.wiz03.com/share/s/2SX2oY0nX4f32CY5ax1bapaL2Qtc5q0tIQjG2yfwaU1MX4Ye
- Ajax经典的面试题
1.什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识)什么是ajax:AJAX是“Asynchronous JavaScript and XML”的缩写.他是指一种创建交互式网页应用的 ...
- 解决nginx bind() to 0.0.0.0:80 failed 问题
nginx的配置文件一开始默认是80端口,出现这个错误多半是80端口已经被占用.这时候只需要把 server { listen 8088; server_name localhost lcsf.com ...
- [手势识别] CNN + OpenCV 手势识别记录
这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,参考了很多网上的图像处理方式,中间也遇到了很多问题,最终算是做出来了吧. 1.训练集 ...
- 实验十二 团队作业8:软件测试与Alpha冲刺
实验十二 团队作业8:软件测试与Alpha冲刺 实验时间 2018-6-13 Deadline: [6.13-6.19]之间任选连续5天的23:00,以团队随笔博文提交时间为准. 评分标准: 按时交 ...