题目链接

题目描述

哆啦A梦班级举办个party,当然吃的东西必不可少,哆啦A梦负责采购任务,他得到了一份清单,上面注明不同食品的受欢迎程度,哆啦A梦需要用一定的价钱尽可能达到的更大的受欢迎程度!例如,瓜子的受欢迎程度为20,瓜子的价钱是50元,那么如果哆啦A梦选择买瓜子,将花费50元,但受欢迎程度增加了20。为了避免食品单调性,每种食品只能买一份,不能重复购买。 现在哆啦A梦需要知道如何采购才能达到最大的受欢迎程度,你能帮助他吗?

输入

输入数据为多组,每组输入的第一行有两个正整数M和N(M<100&&N<1000),分别为哆啦A梦可以支配的钱数和清单上的可选择的物品种类。 接下来的N行每行有两个正整数,分别为每种物品的价钱和它的受欢迎程度(编号为1到N)。

输出

如果存在物品购买,那么输出的第一行为能够达到的最大的受欢迎程度。第二行为需要购买的物品的编号(如果有多种可能,输出字典序靠前的那种),空格分隔每个数字;如没有物品可以购买,输出只有一行,为数字0。

样例输入

复制
10 4
100 5
5 5
5 5
10 10

样例输出

10
2 3 这道题可以使用动态规划:
w[i]:第i件物品的价格
v[i]:第i件物品的欢迎程度
a[i][j]:在第i件物品时,剩余金钱j,得到的在大欢迎程度
我们每次选择都是买i,或不买i
买i物品:a[i][j]=a[i-1][j-w[i]]+v[i];
不买i物品:a[i][j]=a[i-1][j];
我们还需要考虑的是当前的剩余的金钱是否够买i物品
代码:
for(int i=;i<=n;i++)
{
for(int j=;j<=s;j++)
{
//a[i-1][j-w[i]]+v[i]是将i物品装入背包
//a[i-1][j]是不装
if((j-w[i])>=)
{
if(a[i-][j]>=(a[i-][j-w[i]]+v[i]))
{
a[i][j]=a[i-][j];
}
else
{
a[i][j]=a[i-][j-w[i]]+v[i];
}
}
else
{
a[i][j]=a[i-][j];
} }
}

完整代码

#include<bits/stdc++.h>
using namespace std; int main()
{
int s,n;
while(cin>>s>>n)
{
int a[][]={};
int w[]={},v[]={};
int c[]={};
int k=;
for(int i=;i<=n;i++)
{
cin>>w[i]>>v[i];
}
for(int i=;i<=n;i++)
{
for(int j=;j<=s;j++)
{
//a[i-1][j-w[i]]+v[i]是将i物品装入背包
//a[i-1][j]是不装
if((j-w[i])>=)
{
if(a[i-][j]>=(a[i-][j-w[i]]+v[i]))
{
a[i][j]=a[i-][j];
}
else
{
a[i][j]=a[i-][j-w[i]]+v[i];
}
}
else
{
a[i][j]=a[i-][j];
} }
}
if(a[n][s]!=)
{
printf("%d\n",a[n][s]);
for(int i=n,j=s;i>=&&j>=;)
{
if(a[i][j]>a[i-][j])
{
c[k]=i;
k++;
j-=w[i];
i--; }
else
{
i--;
}
}
for(int i=;i>=;i--)
{
if(c[i]>)
{
if(i!=)
printf("%d ",c[i]);
else
printf("%d\n",c[i]);
} }
}
else
{
printf("0\n");
} } return ;
}

动态规划——Buyer的更多相关文章

  1. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  2. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  3. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  5. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  6. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  7. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  9. POJ 1163 The Triangle(简单动态规划)

    http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

随机推荐

  1. 将会改变未来IT世界的十种编程语言

    这里要说的都是革新,说这些的目的就是要保持关注最新技术.如果你是一个程序员,想要探寻未来技术,那这篇文章就是你的必读之选.我们这里列出了10种编程语言,10种将会改变IT世界工作方式的编程语言.这些语 ...

  2. axios 全攻略之基本介绍与使用(GET 与 POST)

    axios axios 是一个基于 Promise 的 HTTP 客户端,专门为浏览器和 node.js 服务 Vue 2.0 官方推荐使用 axios 来代替原来的 Vue request,所以这里 ...

  3. Anton and Letters

    Anton and Letters time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  4. MySQL改动rootpassword的多种方法

     方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newp ...

  5. PixelUtils:像素转换工具

    /** 像素转换工具 */ public class PixelUtils { /** * The context. */ private static Context mContext = Cust ...

  6. linux命令用来查看日志关键字

    1.查看日志 前 n行: cat 文件名 | head -n 数量 demo: cat  test.log | head -n 200 # 查看test.log前200行 2.查看日志 尾 n行: c ...

  7. 使用imgareaselect 辅助后台进行图片裁剪

    由于项目其中用到图片裁剪,本来能够不用到后台进行裁剪的,可是要兼容万恶的IE浏览器,所以不得不使用后台进行裁剪. 这次使用到imgareaselect 插件获取须要裁剪区域的坐标.再由后台进行裁剪操作 ...

  8. HDU 5063 Operation the Sequence(暴力)

    HDU 5063 Operation the Sequence 题目链接 把操作存下来.因为仅仅有50个操作,所以每次把操作逆回去执行一遍,就能求出在原来的数列中的位置.输出就可以 代码: #incl ...

  9. CodeForces 486B

    Let's define logical OR as an operation on two logical values (i. e. values that belong to the set { ...

  10. 【docker】python: can't open file 'helloworld.py': [Errno 13] Permission denied

    运行容器提示权限问题 docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python:3.5 python helloworld. ...