1.P1060 开心的金明

题目描述

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为:

v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号)

请你帮助金明设计一个满足要求的购物单。

输入输出格式

输入格式:

输入的第1行,为两个正整数,用一个空格隔开:

N m (其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。)

从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有2个非负整数

v p (其中v表示该物品的价格(v<=10000),p表示该物品的重要度(1~5))

输出格式:

输出只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。

输入输出样例

输入样例#1:

1000 5
800 2
400 5
300 5
400 3
200 2
输出样例#1:

3900

说明

NOIP 2006 普及组 第二题

 
思路:
  这题好水啊!背包模板啊啊啊!!!
坑点:
  记住你在做什么!数组要开多么大!!
代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int M = ;
int n,m,MIN;
int v[M],w[M];
int dp[]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&v[i],&w[i]);
w[i]*=v[i];
// MIN=min(v[i],MIN);
}
for(int i=;i<=m;i++)
{
for(int j=n;j>=v[i];j--)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
// for(int i=MIN;i<=n;i++)
// printf("%d ",dp[i]);
printf("%d",dp[n]);
return ;
}

2.P1064 金明的预算方案

题目描述

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

主件 附件

电脑 打印机,扫描仪

书柜 图书

书桌 台灯,文具

工作椅 无

如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为:

v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号)

请你帮助金明设计一个满足要求的购物单。

输入输出格式

输入格式:

输入的第1行,为两个正整数,用一个空格隔开:

N m (其中N(<32000)表示总钱数,m(<60)为希望购买物品的个数。)

从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有3个非负整数

v p q (其中v表示该物品的价格(v<10000),p表示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号)

输出格式:

输出只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000)。

输入输出样例

输入样例#1:

1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
输出样例#1:

2200

说明

NOIP 2006 提高组 第二题

思路:

  1)首先题目中有提到每件物品的价格(都是10元的整数倍)。 所以我们可以使用/10的优化

  2)因为如果主件没有完成,附件是不能够完成的,有因为附件最多是2个,所以就将他的附件都记录下来,能更新的话就更新。

坑点:

  一定要开的数组大一点qwq

代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int M = ;
int n,m,Maxm,Minm=;
int v[M],w[M];
int v1[M],w1[M];///fujian1
int v2[M],w2[M];///fujian2
int dp[]; int main()
{
scanf("%d%d",&n,&m);
for(int i=,vi,wi,q;i<=m;i++)
{
scanf("%d%d%d",&vi,&wi,&q);
vi/=;
if(q)///fujian
{
if(v1[q])
v2[q]=vi,w2[q]=vi*wi;
else
v1[q]=vi,w1[q]=vi*wi;
}
else
{
v[i]=vi,w[i]=vi*wi,Maxm=i;
if(!Minm) Minm=i;
}
}
for(int i=Minm;i<=Maxm;i++)
{
for(int j=n/;j>=v[i];j--)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
if(j>=v[i]+v1[i])
dp[j]=max(dp[j],dp[j-v[i]-v1[i]]+w[i]+w1[i]);
if(j>=v[i]+v2[i])
dp[j]=max(dp[j],dp[j-v[i]-v2[i]]+w[i]+w2[i]);
if(j>=v[i]+v1[i]+v2[i])
dp[j]=max(dp[j],dp[j-v[i]-v1[i]-v2[i]]+w[i]+w1[i]+w2[i]);
}
}
printf("%d",dp[n/]*);
return ;
}

 

luogu小金明qwq x的更多相关文章

  1. Luogu P1160队列安排【链表/老文搬家】By cellur925

    原文发表于2018-04-15 08:15:09,我的luogu博客qwq. 看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表. 然而本蒟蒻不久前刚刚学会链表.链表 ...

  2. CSP前的板子们

    见窝的luogu博客qwq noip前的板子们

  3. $vjudge-dp$专题题解

    因为感觉题解写不了多少,,,就懒得一道道题目慢慢写了,汇总了算了$QAQ$ 昂然后因为我估计以后还会有些什么$dp$专题啊$balabala$的,,,然后谢总肯定又会建一堆小组啥的,,,所以还是放个链 ...

  4. Luogu 1060 开心的金明 / NOIP 2006 (动态规划)

    Luogu 1060 开心的金明 / NOIP 2006 (动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨 ...

  5. Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)

    Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...

  6. luogu P1064|| 01背包||金明的预算

    题目描述如下 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 NNN 元 ...

  7. luogu P1060 开心的金明

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今天 ...

  8. luogu P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  9. luogu 1064 金明的预算方案

    01背包 变形,有主附件的背包内则更改决策 original: 1) 不选   2)选,f[j-w[i]]+v[i] now :     1)不选   2)选主   3)主 附1  4)主 附2   ...

随机推荐

  1. [转帖]ORA-00600-[kcratr_nab_less_than_odr]问题小记

    ORA-00600-[kcratr_nab_less_than_odr]问题小记 2018年03月12日 20:56:57 我不是VIP 阅读数 1500   https://blog.csdn.ne ...

  2. 【Python】【基础知识】【内置函数】【dir的使用方法】

    原英文帮助文档: dir([object]) Without arguments, return the list of names in the current local scope. With ...

  3. windows10专业版激活

    [1]右击我的电脑->属性,查看激活情况 [2]管理员身份打开CMD [2.1]如果不知道CMD是什么东西 [2.2]如果上面那个也找不到,直接按windows键(就是ctrl和alt中间那个键 ...

  4. spring简单crud配置文件说明

    字体设置:代码  14px 文字 幼圆 15px 1.在pom.xml下导入依赖包 (1)Spring四个核心依赖包 <dependency> <groupId>org.spr ...

  5. Centos7 更换为网易YUM源

    当我们刚刚安装系统的时候 yum 的速度那是真滴慢所以我们就需要一个更加快速的镜像,这时候网易镜像带给我们便捷.下面来一起更换吧! 备份当前的 yum 源 # yum 源在目录 /etc/yum.re ...

  6. Codeforces 1221F. Choose a Square

    传送门 对于某个点 $(x,y)$ ,不妨设 $x<y$ 因为如果 $x>y$ 直接按 $y=x$ 对称一下即可 当且仅当正方形左下角 $(a,a)$ 满足 $a<=x$,右上角 $ ...

  7. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  8. Windows2003服务器IIS启用Gzip压缩的设置

    http://jingyan.baidu.com/article/148a192178ec834d71c3b12b.html     步骤 1 2 3 本文介绍的HTTP压缩方式,采用的是Window ...

  9. wex5 baasData规则和绑定 学习

    1 在baasData新建一个计算列 2 点击编辑规则,左边选择该计算列, 右边点击计算后面的设置 3 写规则的逻辑 好像不能用if 只能用三目运算符 4 绑定样式和文本的时候 这么用:

  10. JDBC1

    ---恢复内容开始--- create table `account` ( `id` ), `name` ), `balance` ) ); insert into `account` (`id`, ...