【DP】书的复制】的更多相关文章

luoguP1281 书的复制 链接 https://www.luogu.org/problemnew/show/P1281 思路 简单dp,输出方案. 很明显dp记录路径对不对? 恭喜你死了. 求出dp值,倒叙贪心取最长 错误 好久之前咕咕的题目 下载数据才看出来不能记录路径 代码 #include <bits/stdc++.h> using namespace std; const int N=507; const int inf=0x3f3f3f3f; int read() { int…
书的复制 Code: #include <iostream> #include <cstdio> #include <cstring> using namespace std; //Mystery_Sky // #define M 700 #define INF 0x3f3f3f3f int f[M][M], sum[M], a[M]; int n, k; void print(int r) { int num = 0; for(int i = r; i >= 1…
P1281 书的复制 题目背景 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. 题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. 输入格式 第一行两个整数m,k:(k≤m≤500)…
原题链接__戳我噢 [思路] (区间)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…
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. 输入输出格式 输入格式: 第一行两个整数m,k:(k≤m≤500) 第二行m个整数,第i个整数表示第i本书的页数. 输出格式: 共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号.k行的起始编号应该从小…
Description 大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0. 不过,已经修改数据,保证每个人都有活可干. // 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. Input 第一行两个整数m,k:(k≤m≤500) 第二行m…
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. 输入输出格式 输入格式: 第一行两个整数m,k:(k≤m≤500) 第二行m个整数,第i个整数表示第i本书的页数. 输出格式: 共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号.k行的起始编号应该从小…
蒟蒻的\(DP\)很菜,\(SO\)我准备上一套二分的玄学操作 一.简单的二分答案 二分主要是用来解决一些最值问题,它可以有效的优化暴力,使复杂度减少到\(O(logn)\). 我先给大家介绍一下二分里一个常用的模型:左闭右开. 如图,这就是个典型的左闭右开模型.其中,黄色部分可以表示成一个区间 \([1,9\)}, 其中包含了数字\(1\)~\(8\),而并非包含\(9\),在二分里我们把它称之为"右开". 那么回过头来看\(1\),它是区间内的值,也是开始的值\((a.begin(…
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. 输入输出格式 输入格式: 第一行两个整数m,k:(k≤m≤500) 第二行m个整数,第i个整数表示第i本书的页数. 输出格式: 共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号.k行的起始编号应该从小…
分析 两个做法,一个DP,一个是二分. 二分:也就是二分枚举每个人分到的东西. DP:区间DP F[I][J]表示前i本书分给j个人用的最短时间 由于每一次j的状态由比j小的状态得出,所以要先枚举j,然后枚举i,接着枚举上一次抄书的人是谁. AC代码(二分) #include <bits/stdc++.h> using namespace std; int m,k; int a[505]; inline int read() { int w=0,x=0; char ch=0; while (!…