Luogu 1060 开心的金明 / NOIP 2006 (动态规划)
Luogu 1060 开心的金明 / NOIP 2006 (动态规划)
Description
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过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]。(其中*为乘号)
请你帮助金明设计一个满足要求的购物单。
Input
输入的第1行,为两个正整数,用一个空格隔开:
N m (其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。)
从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有2个非负整数
v p (其中v表示该物品的价格(v<=10000),p表示该物品的重要度(1~5))
Output
输出只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。
Sample Input
1000 5
800 2
400 5
300 5
400 3
200 2
Sample Output
3900
Http
Luogu:https://www.luogu.org/problem/show?pid=1060
Source
动态规划
解决思路
这是一道背包问题,设F[i][j]表示前i件物品j元钱时的最大价值,F[i][j]=max(F[i-1][j-V[i]]+W[i],F[i-1][j])
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxN=30001;
const int maxM=25;
int n,m;
int W[maxM];
int V[maxM];
int F[maxN][maxM];
int main()
{
    cin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        V[i]=x;
        W[i]=x*y;
    }
    memset(F,0,sizeof(F));
    for (int i=0;i<=n;i++)
        F[0][i]=0;
    //sort(&W[1],&W[m+1]);
    for (int i=1;i<=m;i++)
    {
        for (int j=n;j>=0;j--)
        {
            if (j>=V[i])
                F[i][j]=max(F[i-1][j],F[i-1][j-V[i]]+W[i]);
            else
                F[i][j]=max(F[i-1][j],F[i][j]);
            //cout<<F[i][j]<<' ';
        }
        //cout<<endl;
    }
    cout<<F[m][n]<<endl;
    return 0;
}
Luogu 1060 开心的金明 / NOIP 2006 (动态规划)的更多相关文章
- 开心的金明 NOIP 2006 普及组
		题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就 ... 
- P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)
		题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ... 
- luogu P1060 开心的金明
		题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今天 ... 
- codevs 1115 开心的金明--01背包
		1115 开心的金明 2006年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购 ... 
- P1060 开心的金明
		P1060 开心的金明 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要 ... 
- 洛谷P1060——开心的金明
		https://www.luogu.org/problem/show?pid=1060 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈 ... 
- 洛谷 P1060 开心的金明
		开心的金明 Problem Description: 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些 ... 
- 【洛谷p1060】开心的金明
		(DP背包第一题,值得记录思路呀) 开心的金明[传送门] 洛谷算法标签: 01背包问题的思路分析见[总结]01背包问题 这道题显然是典型的01背包问题,首先我们显然可以由输入的第i个物体的价格v[i] ... 
- sicily 1342 开心的金明 (动规)
		刷一下简单的背包问题 以下为代码: //1342. 开心的金明 #include <iostream> using namespace std; #define MAX(a,b) a> ... 
随机推荐
- 总结常见的ES6新语法特性。
			前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ... 
- 一个web应用的诞生(13)--冲向云端
			有句话叫所有的乐趣都在部署之前,也许这个小应用还有很多缺陷,也许它还不够完美,但是,仔细想想,其实没有什么能比自己的网站在互联网中上线更令人满足的了,但是满足的背后,总是存在着很多的风险,以至于几乎所 ... 
- 实现UDP高效接收/响应
			环境Linux g++6.3.0 问题一:一个ip地址如何接收高并发请求 问题二:如何高并发响应消息 发送请求端只能通过ip地址+端口号向服务器发送请求码,所以服务器只能用一个UDP去绑定此ip以及端 ... 
- 仿flash轮播
			<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ... 
- winform中的 datagriview 字段自动填充长度
			在winfrom 的 datagridview 中 绑定字段 经常回在最后面空出一部分来,显得不美观, 现在教大家如何让它自适应宽度 public static void Autogrid(DataG ... 
- 关于Python中yield的一些个人见解
			# 样例代码def yield_test(n): for i in range(n): yield call(i) print("i=",i) #做一些其它的事情 print(&q ... 
- MATLAB仿真中连续和离散的控制器有何区别?
			matlab系统同时提供连续和离散的控制器和对象的目的是:在降低用户使用复杂程度的同时提高仿真精度.仿真速度和应用的广泛性. 仿真步长和求解精度的概念对于理解这个问题至关重要. 首先是步长,步长和求解 ... 
- 前台ajax加载数据
			<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> <script sr ... 
- Angular JS的Placeholder功能在IE8/9浏览器中不可用
			附上如下代码可正常工作: .directive('placeholder', function($timeout){ var i = document.createElement('input'); ... 
- echarts3 清空上一次加载的series数据
			今天做图表的时候发现了一个问题,想和大家分享一下 我有一个下拉选框,每次选中都切换不同的数据,数据是从后台查询获取的,但是如果后台返回了数据每次渲染都没有问题,如果后台没有返回数据,但是我在渲染图表的 ... 
