【DP】书的复制
【思路】
(区间)DP
F[I][J]表示前i本书分给j个人用的最短时间
由于每一次j的状态由比j小的状态得出,所以要先枚举j,然后枚举i,接着枚举上一次抄书的人是谁
我觉得,难点在于输出
具体见代码
压行压到手抽筋
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
inline int read(){
char chr=getchar();int f=1,ans=0;
while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=ans*10;ans+=chr-'0';chr=getchar();}
return ans*f;
}
int a[505],f[505][505],n=read(),m=read(),s=0,&ans=f[n][m],num=0,w=n,pre[505],x;
void output(int x){
if(x>0) output(pre[x]-1); else return; if(pre[x]<=0) return;printf("%d %d\n",pre[x],x);}//这里递归输出
int main(){
memset(f,127/2,sizeof(f));memset(pre,0,sizeof(pre));f[0][1]=0;
if(!n&&!m) return 0;//坑点!!!
for(int i=1;i<=n;i++)
a[i]=read(),f[i][1]=f[i-1][1]+a[i];//前i本书都交给第一个人抄(即a[i]的前缀和)
for(int j=2;j<=m;j++)
for(int i=j;i<=n;i++)
for(int k=j;k<=i;k++){
int x=max(f[k-1][j-1],f[i][1]-f[k-1][1]);//取两者最长的抄书时间
if(f[i][j]>x) f[i][j]=x;//取最小值
}
for(int i=n;i>=1;i--){//这里贪心,因为后面的人抄尽量多,前面少,所以倒过来枚举
s+=a[i];
if(s>ans) s=a[i],pre[w]=i+1,w=i;//pre[w]记录这个人抄书的开始位置
}
printf("%d %d\n",1,w);//第一组特判
output(n);//递归输出
return 0;
}
打完收工
hiahiahia~
【DP】书的复制的更多相关文章
- luoguP1281 书的复制 DP,贪心
luoguP1281 书的复制 链接 https://www.luogu.org/problemnew/show/P1281 思路 简单dp,输出方案. 很明显dp记录路径对不对? 恭喜你死了. 求出 ...
- 洛谷 P1281 书的复制
书的复制 Code: #include <iostream> #include <cstdio> #include <cstring> using namespac ...
- 洛谷 P1281 书的复制 题解
P1281 书的复制 题目背景 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. 题目描述 现在要把m本有顺序的 ...
- P1281 书的复制
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. ...
- 「LuoguP1281」 书的复制(贪心
Description 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. // 现在要把m本有顺序的书分给k给人 ...
- 洛谷P1281 书的复制
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. ...
- 题解 洛谷P1281 【书的复制】
蒟蒻的\(DP\)很菜,\(SO\)我准备上一套二分的玄学操作 一.简单的二分答案 二分主要是用来解决一些最值问题,它可以有效的优化暴力,使复杂度减少到\(O(logn)\). 我先给大家介绍一下二分 ...
- P1281 书的复制[二分]
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. ...
- 【洛谷P1281 书的复制】二分+动态规划
分析 两个做法,一个DP,一个是二分. 二分:也就是二分枚举每个人分到的东西. DP:区间DP F[I][J]表示前i本书分给j个人用的最短时间 由于每一次j的状态由比j小的状态得出,所以要先枚举j, ...
随机推荐
- Appium 使用android_uiautomator定位元素时报错: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource
使用 android_uiautomator 定位元素时(现在用的还不太熟,对于这个方法还需要加深了解)报错: 报错信息:The requested resource could not be fou ...
- Linux下/var/log/btmp文件
今天查看了一下服务器,发现/var/log/btmp日志文件比较大占用磁盘空间,搜索一下,此文件是记录错误登录的日志,就是说有很多人试图使用密码字典登录ssh服务,此日志需要使用lastb程序打开. ...
- CAD向控件注册一个命令(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令 ...
- vC web管理无法访问解决办法
localhost:~ # service-control --status vsphere-clientINFO:root:Service: vsphere-client, Action: stat ...
- linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号
linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...
- POJ-1655 Balancing Act(树的重心)
Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the t ...
- 48.cartinality的基本用法
主要知识点 cartinality的用法 es去重用的是cartinality metric算法,对每个bucket中的指定的field进行去重,然后获取去重后的count,类似于count( ...
- 10.多shard场景下relevence score可能不准确
主要知识点 多shard场景下relevence score可能不准确的原因 多shard场景下relevence score可能不准确解决方式 一.多shard场景下relevance sc ...
- UTL
在PL/SQL中,UTL_FILE包提供文本文件输入和输出功能. 可以访问的目录通过初始化参数UTL_FILE_DIR设置. 注意:UTL_FILE只能读取服务器端文本文件,不能读取二进制文件.这时候 ...
- Codeforces Round #427 (Div. 2)——ABCD
http://codeforces.com/contest/835 A.拼英语水平和手速的签到题 #include <bits/stdc++.h> using namespace std; ...