装箱问题

【动态规划】装箱问题

孤人 提交于 2019-11-29 03:27:04
原题传送门 思路 这道题乍看有点难度,但其实就是个容量等于价格的背包问题QAQ。 关于背包问题,详见我的另一篇博文: 【洛谷】采药 此题只要把上一题的代码稍作做些修改即可~ 设dp[i][j]为前i个物体装入容量为j的背包的最大价值,w[i],v[i]分别为第i个物品的重量和价格。 状态转移方程为: dp[i][j]=dp[i-1][j] (j<w[i]) dp[i][j]=max{dp[i-1][j],dp[i-1][j-w[i]]+v[i]} (j≥w[i]) 水代码开始~(逃~~~) Code //经典背包,无需解释 #include<iostream> #include<cstdio> #include<cmath> using namespace std; int T,M,w[31],v[31],dp[31][20001]; int main() { //初始化 for(int i=1;i<=M;i++) { dp[i][0]=0; } for(int i=1;i<=T;i++) { dp[0][i]=0; } //读入 scanf("%d%d",&T,&M); for(int i=1;i<=M;i++) { scanf("%d",&w[i]); v[i]=w[i]; } //装叉走起 for(int i=1;i<=M;i++) { for(int j=1;j<=T;j+

Java装箱和拆箱

让人想犯罪 __ 提交于 2019-11-28 20:15:56
Java是一种面向对象的语言,但是它不是纯面向对象的。 Map<String, Object> map = new HashMap<String, Object>(); map.put("status",2); map.put("resMsg", "hi"); map.put("batchId", "99"); 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。 如果你在Java1.5下进行过编程的话,你一定不会陌生这一点, 你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象。通常这种情况下你的做法是,将这些原始类型的值转换成对象,然后将这些转换的对象放入集合中。 使用Integer,Double,Boolean等这些类我们可以将原始类型值转换成对应的对象,但是从某些程度可能使得代码不是那么简洁精炼。为了让代码简练,Java 1.5引入了具有在原始类型和对象类型自动转换的装箱和拆箱机制。但是自动装箱和拆箱并非完美,在使用时需要有一些注意事项,如果没有搞明白自动装箱和拆箱,可能会引起难以察觉的bug。 本文将介绍,什么是自动装箱和拆箱,自动装箱和拆箱发生在什么时候,以及要注意的事项。 什么是自动装箱和拆箱

自动拆装箱

回眸只為那壹抹淺笑 提交于 2019-11-28 13:12:21
基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型。它们是我们编程中使用最频繁的类型。 Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化。 Java基本类型共有八种,基本类型可以分为三类: 字符类型 char 布尔类型 boolean 数值类型 byte 、 short 、 int 、 long 、 float 、 double 。 数值类型又可以分为整数类型 byte 、 short 、 int 、 long 和浮点数类型 float 、 double 。 Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。 实际上,Java中还存在另外一种基本类型 void ,它也有对应的包装类 java.lang.Void ,不过我们无法直接对它们进行操作。 基本数据类型有什么好处 我们都知道在Java语言中, new 一个对象是存储在堆里的,我们通过栈中的引用来使用这些对象;所以,对象本身来说是比较消耗资源的。 对于经常用到的类型,如int等,如果我们每次使用这种变量的时候都需要new一个Java对象的话,就会比较笨重。所以,和C++一样,Java提供了基本数据类型,这种数据的变量不需要使用new创建,他们不会在堆上创建,而是直接在栈内存中存储,因此会更加高效。

Java入门系列之包装类(四)

余生长醉 提交于 2019-11-28 01:47:55
前言 上一节我们讲解了StringBuilder VS StringBuffer以及二者区别,本节我们来讲解包装类。 包装类 我们知道在Java中有8中基本数据类型,分为数值类型:byte、short、int、long、float、double。字符类型:char。布尔类型:bool,那么什么是包装类呢? 包装类是8种基本数据类型的对象表示,而且8种包装类和字符串对象一样是不可变且final(不可通过继承或扩展破坏不可变性)的 。我们通过查看int的包装类型Integer可知,如下: 如下为基本数据类型对应的包装类以及构造函数参数: 基本数据类型 包装类型 构造参数 byte Byte byte or String short Short short or String int Integer int or String long Long long or String float Float float, double or String double Double double or String char Character char boolean Boolean boolean or String 比如当我们实例化Integer包装类时,既然是对int的包装,要是我们传一个带小数位的数字,毫无疑问也就抛出如下异常了: public class Main { public

.NET Framework学习笔记(九)

我们两清 提交于 2019-11-27 22:49:51
15. 接口 接口继承:类型继承的是接口中的 方法签名 ,而非方法实现。 当一个类型继承了一个接口时,它只是在 允诺 提供其中的方法实现: 如果没有提供,则该类型将被认为是抽象的,从而不可能被实例化 。 接口仅仅是一个包含着一组虚方法的抽象类型,其中每一个方法都有他们的名称、参数和返回值类型。但接口方法不包括任何实现。 接口也可以定义事件、无参属性以及含参属性,因为它们都只不过是映射到方法上的语法缩写而已。 如果在一个类型内实现接口方法的时候忽略了 virtual 关键字,那么该方法将被认为是一个密封的虚方法,继承了该实现类型的其他类型将不可以再重写该方法。 当一个类型“继承”某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中“继承”而来的所有方法。 实现了多个接口的类型允许我们将它的对象看作这些接口中的任何一个。 什么时候使用接口??? 1… 2… 3… 接口举例: 1.使用接口改变已装箱值类型中的字段 struct Point { public int x,y; public void Change( int x, int y) { this .x = x; this .y = y; } public override String ToString() { return String.Format( " ({0},{1}) " ,x,y); } }

java中的自动装箱和拆箱

时光总嘲笑我的痴心妄想 提交于 2019-11-27 12:19:29
一、什么是自动装箱和拆箱: 我们知道java为8种基本类型分别提供了对应的包装类型,在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i=new Integer(10);    而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了: Integer i=10;    这个过程会自动根据数值的类型创建Integer对象,则就是自动装箱,同理 Integer i=10; int j=i;    上面的代码则是自动拆箱,将Integer对象自动拆箱为int 简单来说装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型转化为基本类型 二、装箱和拆箱是如何实现的: 如下代码: public class Main { public static void main(String[] args) { Integer i = 10; int n = i; } }   反编译后得到如下结果 由反编译的结果可知,装箱的时候调用的是Integer的valueOf方法,拆箱时调用的是Integer的intValue方法 其他的包装器类也类似,这里就不一一举例了 总结:java装箱过程是调用包装类的valueOf方法实现的,而拆箱过程则是调用包装类的xxxValue方法实现的

包装类

↘锁芯ラ 提交于 2019-11-27 05:14:32
深入剖析Java中的装箱和拆箱   自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。   以下是本文的目录大纲:   一.什么是装箱?什么是拆箱?   二.装箱和拆箱是如何实现的   三.面试中相关的问题   若有不正之处,请谅解和批评指正,不胜感激。   请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3780005.html 一.什么是装箱?什么是拆箱?   在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: 1 Integer i = new Integer( 10 );   而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了: 1 Integer i = 10 ;   这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。   那什么是拆箱呢?顾名思义,跟装箱对应

P1049 装箱问题

Deadly 提交于 2019-11-27 03:33:26
链接 P1049 装箱问题 感想 这道题就是在0-1背包的基础上加了一点,就是0-1背包是需要装的东西最多(价值最大),但是这题是要求剩余的空间最少,那么首先dp数组里必然是用剩余的空间作为dp所存的内容,转移方程也随之变成了: if(dp[j-item[i]]-item[i]>=0) { dp[j] = min(dp[j], dp[j-item[i]]-item[i]); } code # include <algorithm> # include <bits/stdc++.h> # include <stdlib.h> # include <stdio.h> # include <iostream> using namespace std ; const int maxn = 1005 ; int item [ 30 + 5 ] ; int dp [ 20000 + 5 ] ; int main ( ) { # ifdef LOCAL freopen ( "C:\\Users\\hsxny\\Desktop\\in.txt" , "r" , stdin ) ; # endif int V , N ; scanf ( "%d%d" , & V , & N ) ; for ( int i = 0 ; i < N ; i ++ ) { scanf ( "%d" , & item [