整理图书

时间限制:3000 ms  |  内存限制:65535 KB
难度:5
描述
小明是图书鹳狸猿,他有很多很多的书堆在了一起摆在了架子上,每摞书是横着放的,而且每摞书是订好的
是一个整体,不可分开,(可以想象架子是一条直线),但是这些书高度却参差不齐,小明有强迫症,看不得不整齐
所以他想让这些书的高度形成一个非降序列他才舒心,可是这些书是有序的,所以他只能把其中的一摞书和他相邻的书装订在一起
形成一摞新的书,那么他最少的装订次数是多少呢
输入
多组测试数据,处理到文件结束
每组数据开始有一个n(1<=n<=1000)表示有n摞书
接下来一行是这n摞书的高度a[i],(1<=a<=10^5)(虽然这个高度有点扯淡)
输出
首先输出Case num : 表示第几组数据
接下来对于每组数据输出最少的装订次数
样例输入
5
8 2 7 3 1
1
100
样例输出
Case 1: 3
Case 2: 0
提示
第一组样例:将后4本书装订在一起,共装订3次,组成8 13

第二组样例:只有一本书,无需装订

解题思路:这道题最开始作死。。。自己yy了一个状态dp[i][j]表示前i个序列装订了j次最大高度的最小值,那么这里需要3层for循环,加上一些剪枝。。然后超时。。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 1005;
const int inf = 0x3f3f3f3f;
int n,a[maxn],sum[maxn];
int dp[maxn][maxn];int main()
{int cas = 1,i,j,k;while(scanf("%d",&n)!=EOF){for(i = 1; i <= n; i++){scanf("%d",&a[i]);sum[i] = sum[i-1] + a[i];}memset(dp,inf,sizeof(dp));dp[0][0] = 0;dp[1][0] = a[1];for(i = 2; i <= n; i++)for(j = 0; j < i; j++){for(k = 0; k <= j; k++){if(sum[i] - sum[i-k-1] >= dp[i-k-1][j-k]){dp[i][j] = sum[i] - sum[i-k-1];break;}}if(k <= j) break;}for(int i = 0; i < n; i++)if(dp[n][i] != inf){printf("Case %d: %d\n",cas++,i);break;}}return 0;
}

其实这里不需要这么麻烦,直接dp[i]表示前i个序列的最小整理次数,那么我们只需要维护一个当前的最大高度h即可,因为这个h一定是最后一次装订时可以确定的,那么直接维护h即可找到最小的装订次数。比我之前那个状态又优化了很多。

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 5050;
int a[maxn], sum[maxn], dp[maxn], h[maxn];
int main() {int n, cnt = 0;while ( scanf ( "%d", &n ) != EOF ) {memset ( sum, 0, sizeof ( sum ) );for ( int i = 1; i <= n; i++ ) {scanf ( "%d", &a[i] );h[i] = max ( h[i - 1], a[i] );sum[i] = sum[i - 1] + a[i];}memset ( dp, INF, sizeof ( dp ) );dp[0] = 0;  //当前0或1摞书非降序时需要最少装订次数为0dp[1] = 0;for ( int i = 2; i <= n; i++ ) {for ( int j = i - 1; j >= 0; j-- ) {if ( h[j] <= sum[i] - sum[j] ) {//当前j个中最大高度大于等于从j到i的总书高,进行状态转移if ( dp[i] > dp[j] + i - j - 1 ) {dp[i] = dp[j] + i - j - 1;      //更新dph[i] = sum[i] - sum[j];         //更新前i摞书中最高的书高高度break;}}}}printf ("*Case %d: %d\n",++cnt, dp[n] );}return 0;
}

nyoj 1216 整理图书(dp)相关推荐

  1. RFID智能书架,整理图书不再烦恼

    一直以来,图书盘点,查找,图书整理上架都属于比较繁重的工作,需要大量的时间,人力去完成,不仅浪费时间,也会降低工作人员的积极性,降低读者的满意度,如何解决这些问题一直困扰这图书管理人员. RFID智能 ...

  2. 1771: 书架整理(dp)

    1771: 书架整理 时间限制: 1 Sec 内存限制: 128 MB 题目描述 小明是计算机专业的学生,他想在本科毕业后继续读计算机研究生,于是他决定加入考研大军.所以他准备了非常多的考研复习书,但 ...

  3. NYOJ 304 节能(DP)

    题目描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关掉ZK大道右侧上所有的路灯. 卡多每到早晨5:00准会在ZK大道上某盏路灯的旁边,然后他 ...

  4. NYOJ 309 BOBSLEDDING(dp)

    BOBSLEDDING 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Dr.Kong has entered a bobsled competition because ...

  5. NYOJ 252 01串 dp

    01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这种长度的0 ...

  6. NYOJ 229 工程 二分+dp检验

    工程 时间限制:1000 ms  |  内存限制:65535 KB 描述 有n个工人做两个工程A和B,每个工程都被分为相同的m份,给你第i个工人做A中的一份需要的时间Xi秒,和做B中的一份所需时间Yi ...

  7. 【转】别人整理的DP大全

    为什么80%的码农都做不了架构师?>>>    动态规划 动态规划 容易: 1018 , 1050 , 1083 , 1088 , 1125 , 1143 , 1157 , 1163 ...

  8. ❤️思维导图整理大厂面试高频数组19: 股票问题III的dp数组构建/初始化和空间优化难点, 力扣123❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  9. ❤️思维导图整理大厂面试高频数组20: 股票问题IV的dp数组构建和几个重要注意点❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

最新文章

  1. Smokeping图表参数说明
  2. 初识FPGA(一)(初步介绍FPGA)
  3. C语言//注释使下一行代码失效
  4. cad文字递增快捷键_十年经验总结,100个CAD快捷键。
  5. 信息学奥赛一本通(1318:【例5.3】自然数的拆分)
  6. 使用AspectJ开发AOP更加便捷,你不知道嘛
  7. Linux 忘记 用户名密码
  8. 2017和2019对比图刷屏,真实扎心!苹果中国女老板也跟风晒图...
  9. 编译生成的Apk安装到手机提示应用未安装,需给apk签名
  10. gstreamer的rtsp推流(笔记)
  11. jvisualVm用法
  12. 车辆故障码api DTC查询
  13. 优秀java程序员必须具备的技术技能
  14. 智能车图像处理(三)元素判断
  15. 哪个蓝牙耳机好?盘点2022年600元左右的蓝牙耳机
  16. 真正从零开始搭建网站—宝塔面板+wordpress(超详细教程)
  17. 学计算机网络技术遇到问题,维护计算机网络教室的常见问题及解决方案
  18. python中idx+=1_在Python中为apos;循环访问索引 Dovov编程网
  19. nmap与hydra
  20. 基于cp-abe算法的访问控制方法在linux下的实现和算法优化,基于CP-ABE的访问控制研究...

热门文章

  1. [BZOJ] 3191 [JLOI2013]卡牌游戏
  2. spring配置xml遇到的一些错误,最后修改的版本
  3. nginx配置支持http2
  4. XStream xml与javabean之间的互转
  5. android项目中刷新activity界面
  6. [Java入门笔记] 面向对象三大特征之:封装
  7. 删除vs中最近的项目的方法
  8. java运行环境(JRE)
  9. JQeury form插件的ajaxForm方法和ajaxSubmit方法的区别
  10. 交换机二层交换和三层交换技术比较