信息学奥赛一本通(1018:其他数据类型存储空间大小)

1018:其他数据类型存储空间大小


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 36770     通过数: 31958

【题目描述】

分别定义bool,char类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。

【输入】

(无)

【输出】

一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。

【输入样例】

(无)

【输出样例】

(无)

【参考代码】

#include <iostream>
 
using namespace std;
 
int main()
{
    cout<<sizeof(bool)<<" "<<sizeof(char);
    return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1018

### 关于信息学奥赛一本 1295 题装箱问题 #### 解题思路 此题属于经典的动态规划中的01背包问题变种。给定容器容量V以及若干物品体积wi,目标是在不超过容器总容量的前提下尽可能多地装载这些物品,最终求解未能被利用的空间大小。 定义状态转移方程如下: 设`f[j]`表示当前考虑前i件物品,在总体积恰好等于j的情况下所能获得的最大价值(此处的价值即为所选物体的总体积),则有: \[ f[j]=\max \{f[j],f[j-w_i]+w_i\} \] 其中\( w_i \)代表第i个物品的重量或体积[^2]。 当遍历完所有物品之后,组`f[]`中存储的就是针对不同总体积下的最优解方案。最后过计算初始容量减去最大可容纳体积即可得到剩余未使用的空间量。 #### 代码实现 下面是基于上述思想的具体编程实现方式,采用C++编写而成: ```cpp #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=20010; int weights[35]; // 存储各个物品的质量/体积 bool dp[N]; // 记录对应位置是否可达 // 主函入口 int main(){ memset(dp,false,sizeof(dp)); // 初始化dp表,默认不可达 int capacity,num_items; // 容器容量与物品量 cin>>capacity>>num_items; // 输入据读取 for (int i = 1; i <= num_items; ++i){ cin >> weights[i]; } dp[0]=true; // 空载情况总是可行的 for(int item_id=1;item_id<=num_items;++item_id){ for(int cur_capacity=capacity;cur_capacity>=weights[item_id];--cur_capacity){ if(!dp[cur_capacity]){ dp[cur_capacity]=(dp[cur_capacity]|dp[cur_capacity-weights[item_id]]); } } } // 查找最接近但不大于container_volume的有效填充值 for(int filled_space=capacity;filled_space>=0;--filled_space){ if(dp[filled_space]){ cout<<capacity-filled_space<<endl; break; } } return 0; } ``` 该程序首先初始化了一个布尔类型的二维组来追踪哪些总量是可以达到的状态;接着按照逆序更新每一个可能的状态直到处理完毕所有的项目为止;最后再反向查找最大的有效填充值并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值