奶牛

P2627 修剪草坪

北战南征 提交于 2019-12-04 04:46:09
题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠。 然而,Farm John的草坪非常脏乱,因此,Farm John只能够让他的奶牛来完成这项工作。Farm John有N(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。 靠近的奶牛们很熟悉,因此,如果Farm John安排超过K只连续的奶牛,那么,这些奶牛就会罢工去开派对:)。因此,现在Farm John需要你的帮助,计算FJ可以得到的最大效率,并且该方案中没有连续的超过K只奶牛。 输入格式 第一行:空格隔开的两个整数 N 和 K 第二到 N+1 行:第 i+1 行有一个整数 E_i 输出格式 第一行:一个值,表示 Farm John 可以得到的最大的效率值。 输入输出样例 输入 #1 5 2 1 2 3 4 5 输出 #1 12 思路 考虑动归,在第i点时,在i-k到i中肯定有一个点j不能选择,即:j为断点。 所以###f[i]=max(f[i],f[j-1]+a[j+1]+a[j+2]……a[i])(i-k<=j<=i) 所以维护前缀和,然后方程就变成了 f[i]=max(f[i],f[j

P2627 修剪草坪

。_饼干妹妹 提交于 2019-12-04 02:28:01
题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠。 然而,Farm John的草坪非常脏乱,因此,Farm John只能够让他的奶牛来完成这项工作。Farm John有N(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。 靠近的奶牛们很熟悉,因此,如果Farm John安排超过K只连续的奶牛,那么,这些奶牛就会罢工去开派对:)。因此,现在Farm John需要你的帮助,计算FJ可以得到的最大效率,并且该方案中没有连续的超过K只奶牛。 输入格式 第一行:空格隔开的两个整数 N 和 K 第二到 N+1 行:第 i+1 行有一个整数 E_i 输出格式 第一行:一个值,表示 Farm John 可以得到的最大的效率值。 输入输出样例 输入 #1 复制 5 2 1 2 3 4 5 输出 #1 复制 12 #include<iostream> #include<cstdio> using namespace std; const int N=100005; int n,a,i,l,r,k; long long f[N],s[N],q[N],ans;

2019.10.24模拟赛赛后总结

自作多情 提交于 2019-12-04 02:04:11
本文原创,如果有不到位的地方欢迎通过右下角的按钮私信我! A.Icow Player 题目描述 被无止境的农活压榨得筋疲力尽后,Farmer John打算用他在MP3播放器市场新买的iCow来听些音乐,放松一下。FJ的iCow里存了N(1 <= N <= 1,000)首曲子,按1..N依次编号。至于曲子播放的顺序,则是按一个Farmer John自己设计的算法来决定: * 第i首曲子有一个初始权值R_i(1 <= R_i <= 10,000)。 * 当一首曲子播放完毕,接下来播放的将是所有曲子中权值最大的那首(如果有两首或多首曲子的权值相同,那么这些曲子中编号最小的那首会被选中)。 * 一首曲子在播放结束后,它的权值会被平均地分给其他N-1首曲子,它本身的权值清零。 * 如果一首曲子的权值无法被平均分配(也就是说,无法被N-1整除),那么被N-1除的余数部分将会以1为单位,顺次分配给排名靠前的曲子(也就是说,顺序为曲目1、曲目2...依次下去。当然,刚播放过的那首曲子需要被跳过),直到多出的部分被分配完。 在选定的下一首曲子播放完毕后,这个算法再次被执行,调整曲子的权值,并选出再接下来播放的曲目。 请你计算一下,按FJ的算法,最先播放的T(1 <= T <= 1000)首曲子分别是哪些。 输入 第1行: 2个用空格隔开的整数:N 和 T 第2..N+1行: 第i+1行为1个整数:R

P1985 [USACO07OPEN]翻转棋

天大地大妈咪最大 提交于 2019-12-03 05:06:37
题目描述 农夫约翰知道,聪明的奶牛可以产更多的牛奶。他为奶牛设计了一种智力游戏,名叫翻转棋。 翻转棋可以分成 M × N 个格子,每个格子有两种颜色,一面是黑的,一面是白的。 一旦翻转某个格子,这个格子的颜色就会颠倒。如果把所有的格子都翻成白的,就算奶牛赢了。然而,奶牛的蹄子很大,一旦它们打算翻转某个格子,这个格子附近(即和这个格子有公共边)的格子也会被翻转。一直翻来翻去也很无聊,奶牛们想最小化必须翻动的次数。 请帮助奶牛确定翻动的最少次数和具体的翻法。如果最小解有多个,则输出在字典序意义下最小的那个,如果不可能完成任务,则只要输出一行单词:IMPOSSIBLE。 输入格式 第 1 行:两个整数:M 和 N 第 2 ~ M+1 行:第 i+1 行从左到右依次描述了棋盘第 i 行的颜色,共 N 个整数。 1 代表黑色, 0 代表白色。 输出格式 第 1 ~ M 行:每行 N 个整数,分别表示在各个格子上翻转的次数。 输入输出样例 输入 #1 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 输出 #1 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 说明/提示 ·1 ≤ M, N ≤ 15 思路 搜索 由于第一行的修改方案确定之后,每一行的修改方案就确定了,所以说我们只需要用dfs枚举第一行的修改方案。

Cheapest Palindrome [POJ3280] [区间DP] [经典]

匿名 (未验证) 提交于 2019-12-03 00:32:02
一句话题意:每个字母添加和删除都相应代价(可以任意位置 增加/删除),求把原串变成回文串的最小代价 Description 保持对所有奶牛的跟踪是一项棘手的任务,因此农场主约翰已经安装了一个系统来实现自动化。他在每头奶牛身上安装了一个电子ID标签,系统将在奶牛经过扫描仪时读取。每个ID标记是从字母表中提取的一个字符串。 奶牛,它们是淘气的动物,有时试图通过倒着走来欺骗系统。如果一头奶牛的ID是“abcba”,那么无论她怎么走,它都能读到同样的东西,而拥有“abcb”的奶牛可能会注册为两个不同的ID(“abcb”和“bcba”)。 FJ希望改变奶牛的ID标签,这样无论奶牛走过哪个方向,他们都能读到同样的标签。例如,“abcb”可以通过在末尾添加“a”来改变,从而形成“abcba”,这样ID就会是一个回文串。更改ID的其他一些方法包括将三个字母“bcb”添加到“abcb”的开始,以获得ID“bcbabcb”或删除字母“a”以产生ID“bcb”。我们可以在字符串中的任意位置添加或删除字符,其长度比原来的字符串长或短。 不幸的是,ID标签是电子信息,每个字符插入或删除都有代价,这取决于要添加或删除的字符值。考虑到奶牛ID标签的内容以及插入或删除字母表中的每个字符的成本,找到更改ID标记的最小成本,从而满足FJ的需求。一个空的ID标签被认为满足了读取前后相同的要求

noi.openjudge 10:河中跳房子

匿名 (未验证) 提交于 2019-12-03 00:05:01
http://noi.openjudge.cn/ch0111/10/ 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。 在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。 农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ M ≤ N) 个岩石。 请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少? 输入 第一行包含三个整数L, N, M,相邻两个整数之间用单个空格隔开。 接下来N行,每行一个整数,表示每个岩石与起点的距离。岩石按与起点距离从近到远给出,且不会有两个岩石出现在同一个位置。 输出 一个整数,最长可能的最短跳跃距离。 样例输入 25 5 2 2 11 14 17 21 样例输出 4 提示

USACO 2019 February Contest Platinum T1: Cow Dating

匿名 (未验证) 提交于 2019-12-02 23:49:02
题目大意 由于目前可供奶牛们使用的约会网站并没有给Farmer John留下深刻印象,他决定推出一个基于新匹配算法的奶牛交友网站,该算法可基于公牛和母牛间的共同兴趣对公牛和母牛进行匹配。 N ( 1 ≤ N ≤ 1e 6 p (0 < p < 1) 。 Bessie决定向列表中的一个连续区间内的奶牛发送邀请,但Bessie希望恰好只有一个奶牛接受邀请。请帮助Bessie求出恰好只有一个奶牛接受邀请的最大概率是多少。 题目分析 令 p s ∏ i k = 1 ( 1 p k ) , 1~i 中只选 i 这个数的概率为 s i t i t i = ∑ i k = 1 1 p k) p k ) l ] 中一个数的答案加起来得区间的答案为 r /s l-1 ( t r t l 1 ) 固定右端点r,直观感觉到随着l的左移,乘积第二项变大,乘积第一项变小。 那么总的答案为 (1-p 1 )(1-p 2 )..(1-p n ) * ( p 1 /(1-p 1 ) + p 2 /(1-p 2 ) + ... + p n /(1-p n ) ) 我们可以发现,右端点的取值是单调递增的 于是,我们可以极限一下,用一个双指针法,类似于队列。 记录两个变量,表示和 与 积即可。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int

. 奶牛排队

匿名 (未验证) 提交于 2019-12-02 23:49:02
. 奶牛排队 描述 提交 自定义测试 【题目描述】: 【输入描述】: 【输出描述】: 【样例输入】: 5 1 2 3 4 1 【样例输出】: 4 【样例说明】: 【时间限制、数据范围及描述】: 【code】 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 int f[1000005], h[1000005]; 6 int n,ans,i; 7 int main(){ 8 scanf("%d",&n); 9 for(i=1;i<=n;i++) 10 scanf("%d",&h[i]); 11 for(i=1;i<=n;i++){ 12 int id=i-1, j=i-1; 13 while(j) { 14 if(h[j]>=h[i]) break; 15 if(h[f[j]+1]<h[id+1]) id=f[j]; 16 j=f[j]; 17 } 18 f[i]=id; 19 ans=max(ans, i-id); 20 } 21 if(ans==1)ans=0; 22 printf("%d", ans); 23 return 0; 24 } #include <cstdio> #include <cstring> #include <algorithm>

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

匿名 (未验证) 提交于 2019-12-02 23:48:02
题目:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? 输入 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。 输出 对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。 样例输入 2 4 5 0 样例输出 2 4 6奶牛的数量与年份的关系如下表 年份 1 2 3 4 5 6 7 数量 1 2 3 4 6 9 13 到第五年由于第二年生成的一头小奶牛开始生产所以有6头奶牛,到第6年第二年小奶牛在生产一头奶牛,第三年的两头小奶牛生产2头小奶牛所以一共有9头奶牛,因此由表格可以看出从第五年开始奶牛的数量开始有规律,F(n) = F(n-1)+F(n-3), 即当年奶牛数量为前一年奶牛数量加上前三年奶牛数量。 import java.util.Scanner; public class Main { public static void main(String[] args) {   Scanner in = new Scanner(System.in);   int n;   while((n=in.nextInt())!=0){   if(n>=1&&n<=4)   System.out

[递推]销售

匿名 (未验证) 提交于 2019-12-02 23:47:01
问题 G: 销售 [ 提交 ] [ ״̬ ] [命题人: admin ] 题目描述 农夫 John 正在筹划从他的谷仓中售出 N 头奶牛,与此同时也有 N 个农夫想要购买奶牛。每个农夫都有刚好足够购买一头奶牛的钱并且将会把买来的这头奶牛用来挤奶。为了减少买来的牛挤不出奶的风险,农夫们每个人都将会购买两头不同的奶牛各自一半的产权,然后将获得每头牛产奶量的一半。 如果将两种方案中每个农夫都购买了相同的奶牛看作是相同的销售方案。那么农夫 John 一共有多少种不同的销售方案呢? 输入 第一行包含一个整数t ≤ 100,为数据的组数。接下来t行每行包含一个整数N ≤ 2000作为输入数据。 输出 样例输入 复制样例数据 3 1 2 3 样例输出 0 1 6 提示 对于50%的数据,N≤20, 对于100%的数据,N≤2000. f[i]=C(n,2)*C(2,1)*f[i-1]; f[i]=C(n,2)*(n-1)*f[i-2]; AC代码: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e7+7; ll f[2005]; void init() { f[2]=1; for(ll i=3;i<=2000;i++) { f[i]=(i*(i-1)*f[i-1]%mod+i*