装箱问题

1017 装箱问题

匿名 (未验证) 提交于 2019-12-03 00:04:02
题目描述: 描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。输入输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。输出除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。样例输入 0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0 样例输出 2 1 #include<iostream> using namespace std; int main(){ int N,a,b,c,d,e,f,y,x; int u[4]={0,5,3,1}; while (1){ cin>>a>>b>>c>>d>>e>>f; if (a==0 && b==0 && c==0 && d==0 && e==0 && f==0 ) break; N=f+e+d+(c+3)/4; y=5*d+u[c%4];

洛谷 P1049 装箱问题(01背包)

匿名 (未验证) 提交于 2019-12-02 23:49:02
一道水题,但看到好久没有发博客了, 再一看是一道noip普及组t4 ,就做了。 题目链接 https://www.luogu.org/problemnew/show/P1049 解题思路   一道裸的01背包,注意价值和重量是一个东西,且最后输出剩余的体积。   随随便便二维就AC了, 懒得写一维。 AC代码 1 #include <iostream> 2 #include <algorithm> 3 #include <cmath> 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <queue> 8 #include <set> 9 #include <map> 10 #include <vector> 11 #include <iomanip> 12 #include <ctime> 13 #include <stack> 14 using namespace std ; 15 int n , v , w [ 35 ], dp [ 35 ][ 20005 ]; 16 int main () 17 { 18 //freopen("","r",stdin); 19 //freopen("","w",stdout); 20 cin >> v >> n ; 21 for ( int i =

装箱问题

匿名 (未验证) 提交于 2019-12-02 23:36:01
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 一个整数v,表示箱子容量 一个整数n,表示有n个物品 一个整数,表示箱子剩余空间。 24 6 8 3 12 7 9 7 0 #include <iostream> #include <algorithm> using namespace std; int getgoods(int goods[],int k,int v,int n) { int a,b; if(k >= n) return v; if(v - goods[k] < 0 ) return v; if(v - goods[k] == 0) return 0; a=getgoods(goods,k+1,v-goods[k],n); b=getgoods(goods,k+1,v,n); if(a < b) return a; else return b; } int main(void) { int v,n; int i; int goods[31]; int last; cin >> v >> n; for(i=0;i < n;i++) cin >> goods[i]; std::sort(goods,goods + n); last

CLR-2-2-引用类型和值类型

匿名 (未验证) 提交于 2019-12-02 22:10:10
引用类型和值类型,是一个老生常谈的问题了。装箱拆箱相信也是猿猿都知,但是还是跟着CLR via C#加深下印象,看有没有什么更加根本和以前被忽略的知识点。 引用类型: 引用类型有哪些这里不过多赘述,来关心一下它在计算机内部的实际操作,引用类型总是从托管堆分配,线程栈上存储的是指向堆上数据的引用地址,首先确立一下四个事实: 所以引用类型对性能是有显著影响的。 值类型: 值类型是CLR提供的轻量级类型,它把实际的字段存储在线程栈上 值类型不受垃圾回收器的限制,所以它的存在缓解了托管堆的压力,也减少了垃圾回收的次数。 值类型都是派生自System.ValueType 所有值类型都是隐式密封的,目的是防止将值类型作为其他引用类型的基类 值类型初始化为空时,默认为0,它不像引用类型是指针,它不会抛出 NullReferenceException 异常,CLR还为值类型提供了可控类型。 误区防范:根据我自己的经验,要避免对引用类型值类型赋值的错误认识,我们先需要清楚,定义值类型,引用类型的底层实际操作,下面先根据流程图了解一下: 例子: 1 class SomeRef{public int x;} 2 struct SomeVal{public int x;} 3 4 staic void Test 5 { 6 SomeRef r1=new SomeRef(); 7 SomeVal v1

C# 装箱和拆箱

匿名 (未验证) 提交于 2019-12-02 22:06:11
Object类型是所有类型的基类,其下面有ValueType类型。什么结构啊,枚举啊,都继承ValueType,这些都是值类型。其他的什么类啊,数组啊,字符串啊等等都是引用类型。 简单的说,直接继承Object的都是引用类型,继承ValueType的都是值类型。 那样的话,像整形这样的结构按理说其实也是间接继承自Object的,那么按照里氏替换原则,整形转换成object应该没有问题吧。 像上面的代码,这个b还是值类型吗?如果是值类型,好像又和直接继承Object都是引用类型矛盾了啊。其实这就是“装箱”。A是值类型,变成b,而成了Object类型,其实就变成了引用类型,简单的说装箱就是将值类型转成引用类型。与之对应的拆箱,将引用类型变成值类型。 那不就是个类型转换吗?还整个什么拆箱和装箱这样难听的名字! 错!值类型和引用类型之间的转换与什么一般的子类转父类,父类转子类不一样,他这种转换可涉及到存储上的变化 double d = 2.8; object obj = d; //装箱操作,要尽量避免装箱 d=(double)obj; //拆箱操作,影响性能,要避免拆箱操作 隐式转换:不需要声明就能转换的转换 int i=221; long j=i; 显式转换:又称“强制转换” double x=25.0123; int y=(int)x; int y=Convert.ToInt32(x)

深入剖析Java中的装箱和拆箱

最后都变了- 提交于 2019-12-01 09:05:41
一.什么是装箱?什么是拆箱?    Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。 在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:      而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:      这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:      简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。下表是基本数据类型对应的包装器类型:    二.装箱和拆箱是如何实现的   上一小节了解装箱的基本概念之后,这一小节来了解一下装箱和拆箱是如何实现的。我们就以Interger类为例,下面看一段代码:      反编译class文件之后得到如下内容:      从反编译得到的字节码内容可以看出,在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。 其他的也类似,比如Double、Character,不相信的朋友可以自己手动尝试一下

[NOIP普及组2011]装箱问题

风流意气都作罢 提交于 2019-11-30 16:05:31
目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 样例 输入 输出 前缀知识 题解 题目名称:装箱问题 来源:2011年NOIP普及组 链接 博客链接 CSDN 洛谷博客 题目链接 Vijos 题目 递交 讨论 题解 洛谷(P1049) 题目 提交代码 提交记录 讨论列表 查看题解 题目内容 题目描述 有一个箱子容量为 \(V\) (正整数, \(0\le V\le20000\) ),同时有 \(n\) 个物品( \(0<n\le30\) ),每个物品有一个体积(正整数)。 要求 \(n\) 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 格式 输入 \(1\) 个整数,表示箱子容量 \(1\) 个整数,表示有 \(n\) 个物品 接下来 \(n\) 行,分别表示这 \(n\) 个物品的各自体积 输出 \(1\) 个整数,表示箱子剩余空间。 样例 输入 24 6 8 3 12 7 9 7 输出 0 前缀知识 01背包 题解 这是一道01背包裸题,先进行01背包,在找到比 \(v\) 小但是可以得到的数,输出 \(v\) 与这个数的差。 //C++ #include<bits/locale_facets.h> #include<bitset> #include<stdio.h> #define downto(name,i,u,d) for(name i=u

LG2530 「SHOI2001」化工厂装箱员 高维DP+记忆化搜索

穿精又带淫゛_ 提交于 2019-11-30 05:51:35
问题描述 LG2530 题解 设 \(opt[i][a][b][c][d]\) 代表装到第 \(i\) 个后,第 \(1,2,3\) 手上分别还剩 \(a,b,c\) 个的最小操作数。 记忆化搜索即可。 启示:如果状态没想法,可以先写爆搜,确定状态。 \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; void read(int &x){ x=0;char ch=1;int fh; while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar(); if(ch=='-') ch=getchar(),fh=-1; else fh=1; while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); x*=fh; } const int maxn=100+7; const int INF=0x3f3f3f3f; int n,a[maxn]; int cnt[4]; int opt[maxn][11][11][11]; char c; int dfs(int k[4],int step){ if(opt[step][k[1]][k[2]][k[3]]) return opt[step][k[1]][k[2]][k[3]]; if(

CLR基础 - 基元类型、值类型和引用类型

雨燕双飞 提交于 2019-11-30 01:46:38
编程语言的基元类型 某些数据类型如此常用,以至于许多编辑器允许代码以简化语法来操纵它们。没简化之前的代码如下所示: System.Int32 a = new System.Int32(); 简化之后的代码如下: int a =0; 编译器直接支持的数据类型称为 基元类型。 基元类型直接映射到 Framework 类库( FCL)中存在的类型。表 5-1 列出了FCL 类型在 C# 中有的基元类型。只要符合公共语言规范(CLS)的类型,其他语言都提供了类似的基元类型。 checked 和 unchecked C#允许程序员自己决定如何处理溢出。溢出检查默认关闭。如果想让C# 编译器控制溢出的一个办法是使用 /checked+ 编译器开关。这样生成的代码会稍慢一些,因为CLR 会检查这些运算,判断是否发生溢出。如果发生溢出则抛出 OverflowException 异常。 除了全局性的打开和关闭溢出检查,程序员还可以在代码的特定区域控制溢出检查。如下所示使用 了checked 和 unchecked 操作符来提供这种灵活性。 UInt32 invalid = unchecked((UInt32) (-1)); 引用类型和值类型 引用类型从托管堆中分配,C#的new 操作符返回对象内存地址—— 即指向对象数据的内存地址。使用引用类型注意以下4 点: 内存必须从托管堆中分配

1017 装箱问题

余生颓废 提交于 2019-11-29 12:42:11
题目描述: 描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。输入输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。输出除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。样例输入 0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0 样例输出 2 1 #include<iostream> using namespace std; int main(){ int N,a,b,c,d,e,f,y,x; int u[4]={0,5,3,1}; while (1){ cin>>a>>b>>c>>d>>e>>f; if (a==0 && b==0 && c==0 && d==0 && e==0 && f==0 ) break; N=f+e+d+(c+3)/4; y=5*d+u[c%4];