题目链接

题目描述

哆啦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. Photoshop教程

    Photoshop百科 Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件. Photoshop主要处理以像素所构成的数字图像.使用其众多的编修与绘图 ...

  2. Java枚举类型使用示例

    Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...

  3. Qt5.9 提供Qt Remote Objects,OAuth1 & OAuth2,重写了QML的GC

    Technology Preview Modules Qt Remote Objects - A module that allows you to easily share QObject inte ...

  4. Android.mk宏定义demo【转】

    本文转载自:http://blog.csdn.net/u010164190/article/details/72783963 1.Android.mk  LOCAL_PATH := $(call my ...

  5. 0x58B 四边形不等式

    bzoj1563: [NOI2009]诗人小G 还有优化二维区间DP的,形如f[i][j]min{f[i][k]+f[k][j+1]+val(i,j)} 其中val满足四边形不等式,而且对于任意a&l ...

  6. sql server中的悲观锁和乐观锁

    https://www.cnblogs.com/chenwolong/p/Lock.html https://www.cnblogs.com/dengshaojun/p/3955826.html ht ...

  7. JavaScript Simple

    ylbtech-JavaScript: 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http: ...

  8. (Go)02.go 安装delve调试工具测试

    安装调试工具 go get github.com/derekparker/delve/cmd/dlv 增加断点调试 调试--->启动调试

  9. php模版静态化原理

    看了一些开源系统的,简单的总结一下php的模板及静态原理. 先贴代码,再做解释. index.php <?php //如果已存在静态页面,直接读取并显示 if(file_exists('inde ...

  10. Wannafly挑战赛25 C 期望操作数 数学

    题目 题意:给你你一个数x和一个数q,x<=q,每一次可以等概率把x变成[x,q]中任意一个数,问变成q的步数的期望,输出对998244353取模,多组询问 题解:首先肯定的是,可以预处理,因为 ...