【NYIST】暑假训练赛 (一)-----Problem B
来源:互联网 发布:魅族 智能手表mix 知乎 编辑:程序博客网 时间:2024/06/10 11:57
整理图书
时间限制:3000 ms | 内存限制:65535 KB
难度:5
- 描述
- 小明是图书鹳狸猿,他有很多很多的书堆在了一起摆在了架子上,每摞书是横着放的,而且每摞书是订好的是一个整体,不可分开,(可以想象架子是一条直线),但是这些书高度却参差不齐,小明有强迫症,看不得不整齐所以他想让这些书的高度形成一个非降序列他才舒心,可是这些书是有序的,所以他只能把其中的一摞书和他相邻的书装订在一起形成一摞新的书,那么他最少的装订次数是多少呢
- 输入
- 多组测试数据,处理到文件结束
每组数据开始有一个n(1<=n<=1000)表示有n摞书
接下来一行是这n摞书的高度a[i],(1<=a<=10^5)(虽然这个高度有点扯淡) - 输出
- 首先输出Case num : 表示第几组数据
接下来对于每组数据输出最少的装订次数 - 样例输入
58 2 7 3 11100
- 样例输出
Case 1: 3Case 2: 0
- 提示
- 第一组样例:将后4本书装订在一起,共装订3次,组成8 13
第二组样例:只有一本书,无需装订 - 来源
- CF
- 上传者
- ACM_孙毓阳
分析:哎!做了很久,不知道自己的思路和代码哪里错了。后来,看了别人的题解,用了别人的思路才AC了,自己太菜!!!
思路:DP。
CODE:
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int main(){ const int maxn=1005; int n,cnt=0; while(scanf("%d",&n)!=EOF){ int high[maxn],sum[maxn],hmax[maxn]; sum[0]=0,hmax[0]=0; for(int i=1;i<=n;i++){ cin>>high[i]; sum[i]=sum[i-1]+high[i]; hmax[i]=max(high[i],hmax[i-1]); } int dp[maxn]; for(int i=0;i<maxn;i++) dp[i]=1e6; dp[0]=dp[1]=0; for(int i=2;i<=n;i++) for(int j=i-1;j>=0;j--) if(hmax[j]<=sum[i]-sum[j]&&dp[i]>dp[j]+i-j-1){ dp[i]=dp[j]+i-j-1; hmax[i]=sum[i]-sum[j]; break; } cnt++; cout<<"Case "<<cnt<<": "<<dp[n]<<endl; } return 0;}
附上一直未AC:
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int main(){ int n,cnt=0; while(scanf("%d",&n)!=EOF){ int high[1005],ans=0,sum=0; memset(high,0,sizeof(high)); for(int i=0;i<n;i++) cin>>high[i]; for(int i=1;i<n;i++){ sum+=high[i]; if(sum>=high[i-1]){ high[i]=sum; sum=0; } else if(sum+high[i-1]<=high[i+1]){ high[i]=sum+high[i-1]; sum=0; ans++; } else{ high[i]=high[i-1]; ans++; } } cnt++; cout<<"Case "<<cnt<<": "<<ans<<endl; } return 0;}
0 0
- 【NYIST】暑假训练赛 (一)-----Problem B
- 【NYIST】暑假训练赛 (三)----Problem B
- 【NYIST】暑假训练赛 (一)-----Problem H
- 【NYIST】暑假训练赛 (一)----Problem F
- 【NYIST】暑假训练赛 (三)----Problem G
- nyist 524 A-B Problem
- hpu暑假训练B
- hpu暑假训练 B
- hpu暑假训练 B
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]CF-236B. Easy Number Challenge
- NYIST 844 A+B Problem(V)
- 暑假编程训练---B:人见人爱A^B
- 暑假训练赛20160719
- 暑假训练赛20160720
- hpu暑假训练 B 矩阵乘法【矩阵】
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一] E题
- 算法训练 A+B Problem
- 算法训练 A+B Problem
- Struts2标签库
- Class.forName和ClassLoader.loadClass的区别
- __thread关键字
- import 用法与包的导入
- csu oj K swap operation 模拟
- 【NYIST】暑假训练赛 (一)-----Problem B
- 8.12java学习篇
- Path Sum II
- 解决混淆报错问题-打包签名出现问题的解决方法
- weka连接mysql数据库及修改weka后打包问题汇总
- HDU 4585 Shaolin(treap模板题)
- java-反射 基础
- HDU 5371Hotaru's problem Manacher+线段树
- 轻松替换指定文件夹里的所有内容匹配的文件!