2017网易秋招--7、买苹果

题目描述:(DP问题)

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

输入描述:

输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果

输出描述:

输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1

输入例子:

20

输出例子:

3

思路:DP问题。首先dp[i] = min(dp[i],dp[i-a[j]+1)。输入苹果总个数,把dp初始为sum,这样保证最后dp[sum] = sum则没有可以正好sum的结果,否则输入dp[sum]

 1 #include <iostream>
 2 using namespace std;
 3 //dp[i] = min(dp[i],dp[i-a[j]+1)
 4
 5 int main()
 6 {
 7     int sum;
 8     while(cin>>sum)
 9     {
10         int a[2] = {6,8};
11         int dp[100];
12         dp[0] = 0;//也是关键之处
13         for(int i=1;i<100;i++)
14         {
15             dp[i] = sum;
16         }
17         for(int i=0;i<=sum;i++)
18         {
19             for(int j=0;j<2;j++)
20             {
21                 if(i>=a[j] && dp[i-a[j]] + 1 < dp[i])
22                 {
23                     dp[i] = dp[i-a[j]]+1;
24                 }
25             }
26         }
27         if(dp[sum] == sum)
28             cout<<-1<<endl;
29         else
30             cout<<dp[sum]<<endl;
31         return 0;
32     }
33 }
时间: 2024-11-06 19:27:21

2017网易秋招--7、买苹果的相关文章

2017网易秋招编程集合

CPP http://blog.csdn.net/achiberx/article/details/74058208 [编程题]回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列.现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数

2017网易秋招--8、计算糖果

A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息: A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数. 现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C.这里保证最多只有一组整数A,B,C满足所有题设条件. 输入描述: 输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开. 范围均在-30到30之间(闭区间). 输出描述: 输

2017年秋招美团Java程序员开发,看我如何拿到offer

热乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧.三面技术面面经如下: 一面: 中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的... 1.了解SOA,微服务吗? 2.分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上? 一.轮询.二.随机.三.最小响应时间.四. 最小并发数.五.哈希. 3.设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器(使用key分段.一致性hash) 4.如何保证缓冲区和数据库之间的强一致性(

网易秋招校招编程题

网易内推面试凉了,再战正式批笔试,选择和简答略难,编程题很良心,基本就是模拟.找规律,略加思考就能解出来的题目,本弱鸡只有在良心网易笔试才能AK. 1.翻转翻转 这题一开始没思路,ac了后两题后再回来思考,发现只需要判断某个位置周围有几个点,就代表了那个位置会被别的点翻转几次,那么如何求周围有几个点呢? 简单的把位置分成3类: 一类是四个顶点:每个顶点会被翻转4次(加上自己翻转一次). 第二类是四条边(不含顶点):边上的点会被翻转6次. 第三类就是中间部分:中间的每个点会被翻转9次. 因此翻转9

6、工作安排--2017网易春招

[编程题] 工作安排 时间限制:1秒 空间限制:32768K 现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作).现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去.如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划. 输入描述: 输入数据有n+1行: 第一行为工程师人数n(

11、堆砖块--2017网易春招

[编程题] 堆砖块 时间限制:1秒 空间限制:32768K 小易有n块砖块,每一块砖块有一个高度.小易希望利用这些砖块堆砌两座相同高度的塔.为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次.小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢. 输入描述: 输入包括两行: 第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块 第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ height[i] ≤ 500000) 输出描述: 如果小易能堆砌出

12、分饼干--2017网易春招

[编程题] 分饼干 时间限制:1秒 空间限制:32768K 易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了.易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友.现在你需要计算出k有多少种可能的数值 输入描述: 输入包括两行: 第一行为盒子上的数值k,模糊的数位用X表示,长度小于18(可能有多个模糊的数位) 第二行为小朋友的人数n 输出描述: 输出k可能的数值种数,保证至少为1 输入例子: 999999999999

9、涂棋盘--2017网易春招

[编程题] 涂棋盘 时间限制:1秒 空间限制:32768K 小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘.小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格. 输入描述: 输入数据包括n+1行: 第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小 接下来的n行每行一个字符串表示第i行棋盘的颜色,'W'表示白色,'B'表示黑色 输出描述: 输出小易会涂画的区域大小 输入例子: 3 BWW BBB BWB 输出

网易2017秋招笔试题3:最长公共子括号序列长度

[问题来源]网传的2017网易秋招笔试题 [问题描述] [算法思路] 下面的解题思路摘自  http://www.cnblogs.com/Atanisi/p/7500186.html 刚看到题我就想到暴力解,深搜出所有合法的括号序列,再依次比较公共子序列的长度,返回最长的.但是深搜一般和路径有关,这道题仅仅需要最大公共子序列的长度.而我们发现最大公共子序列的长度就是 s.size() - 1(当且仅当修改距离为 1 时 LCS 最大), 那么我们就想到,可以变换 s 中一个括号的位置,枚举所有的