蛋糕

蛋糕分层

痞子三分冷 提交于 2020-01-13 16:35:23
【题目描述】 蛋糕店刚好有对应上、中、下三层的三类蛋糕,大家知道多层蛋糕一般都是上层最小,中层其次,下层最大,不然蛋糕就不漂亮了。在知道每一种蛋糕的体积的前提下有多少符合条件的方案。 【思路分析】 【不好的个人感觉】 看到这道题,就感觉是动态规划,题目不是说蛋糕层数的要求吗?可以从下往上的推,个人的第二个感觉是一道搜索题,然后就这么打着,样例过的,手推的数据也过的。没想到就QAQ了。 【暴力出奇迹 】 爆0之后,试了一下暴力,把每一种情况都考虑一遍,选最优值,这样时间复杂度是O(n^2)的。至少还有点分(虽然我没提交,但我知道啊)。个人感觉就是不对。emm,我想复杂了。 【计数】 其实计数就是暴力的优化,读入把数字存入下标(万幸没有负数,哈哈)。数据卡的刚刚好。然后与暴力一样,不停地从上往下(只希望不要挂了),找最优值。啊,果然对了(AC)。这相当于是正解了吧。 先附上代码:(此代码,不要copy谢谢) #include<bits/stdc++.h> // 万能头 using namespace std; // 空间定义 long long n,m,k,x,a[3939],b[3939],c[3939],maxn1,maxn2,maxn3,ans,a1[514514];//定义变量 int main() { //开始疯狂的操作 cin>>n>>m>>k; // 读入这些值 for

分蛋糕

别来无恙 提交于 2020-01-13 16:34:51
问题描述   小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。   请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕。 输入格式   输入的第一行包含了两个整数n, k,意义如上所述。   第二行包含n个正整数,依次表示a1, a2, …, an。 输出格式   输出一个整数,表示有多少个朋友分到了蛋糕。 样例输入 6 9 2 6 5 6 3 5 样例输出 3 样例说明   第一个朋友分到了前3块蛋糕,第二个朋友分到了第4、5块蛋糕,第三个朋友分到了最后一块蛋糕。 评测用例规模与约定   对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 10000,1 ≤ ai ≤ 1000。 解析: 这是ccf认证上一水题,思路也很简单,就是直接求和,每当和大于最小重量、时,和归零,计数加一;代码附上: #include<iostream> using namespace std; const int maxn = 1005; int main(){ int sum=0

【JZOJ】【二分】蛋糕

早过忘川 提交于 2019-12-14 05:07:40
L i n k Link L i n k J Z O J JZOJ J Z O J 3918 3918 3 9 1 8 D e s c r i p t i o n Description D e s c r i p t i o n 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力。现在Bessie要把蛋糕横的切3刀再竖的切3刀,由于Bessie刀法厉害,所以每个格子蛋糕都是完整的,显然蛋糕会被切成16份,然后Bessie和他的15个朋友们每人拿一份,Bessie比较客气,总是等其他朋友拿完了,Bessie拿最后剩下的那一份。Bessie的朋友们都很不客气,都是挑最多巧克力的那份去拿,于是Bessie最后拿到手的那份蛋糕总是巧克力总和最少的。Bessie心想:既然自己总是最后拿蛋糕,那应该怎么切蛋糕,才能使得自己拿的那部分蛋糕的有尽量多的巧克力呢?这个问题自然是你的任务了。 I n p u t Input I n p u t 第一行,个两整数R,C。 接下来有R行,每行有C个整数,每个整数范围是0至9。 O u t p u t Output O u t p u t 一个整数,表示Bessie最后拿到的蛋糕最多可以有多少巧克力。 S a m p l e Sample S

【二分答案】jzoj蛋糕

北战南征 提交于 2019-12-14 00:03:16
Link ~~(又一个)~~二分答案。 题目描述 今天是Bessie的生日,他买了一个蛋糕和朋友们一起分享,蛋糕可以看成是一个R行C列的表格,共有R*C个格子,每个格子都有一个0至9的数字,表示该格子蛋糕拥有的巧克力。现在Bessie要把蛋糕横的切3刀再竖的切3刀,由于Bessie刀法厉害,所以每个格子蛋糕都是完整的,显然蛋糕会被切成16份,然后Bessie和他的15个朋友们每人拿一份,Bessie比较客气,总是等其他朋友拿完了,Bessie拿最后剩下的那一份。Bessie的朋友们都很不客气,都是挑最多巧克力的那份去拿,于是Bessie最后拿到手的那份蛋糕总是巧克力总和最少的。Bessie心想:既然自己总是最后拿蛋糕,那应该怎么切蛋糕,才能使得自己拿的那部分蛋糕的有尽量多的巧克力呢?这个问题自然是你的任务了。 Input 第一行,个两整数R,C。 接下来有R行,每行有C个整数,每个整数范围是0至9 Output 一个整数,表示Bessie最后拿到的蛋糕最多可以有多少巧克力。 数据范围 40%的数据, 4 <= R,C <= 10。 60%的数据, 4 <= R,C <= 20。 100%的数据, 4 <= R,C <= 75。 题目大意 给出一个r*c的数字矩阵,横切三刀,竖切三刀(没有弯曲部分),求如何切使得最小一块矩阵和最大。 这数据范围…暴力走起。 暴力枚举竖切三刀的位置

L1731

本小妞迷上赌 提交于 2019-12-06 02:33:22
生日蛋糕 输入的东西,一个是蛋糕的体积,一个是蛋糕的层数, 简言之,我觉得这个就是两个dfs的状态。 一旦越过这两个就得return ,同时这两个东西也参与进去了dfs。 至于题目, 第一个要求是层数越高,高度越小,半径越小。 第二个要求是枚举的面积要最小。 那么我觉得可能核心的判断在于最小的判断。 除此外,还有一些,细节上比较恶心的事情。 比如这个pi的处理,虽然。。恩我没懂 还有点double的处理。。。但是pi的话,不怕把? 来源: https://www.cnblogs.com/beiyueya/p/11957270.html

luogu P1714 切蛋糕 |单调队列

ε祈祈猫儿з 提交于 2019-12-04 08:11:58
题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。 吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。 输入格式 输入文件cake.in的第一行是两个整数N,M。分别代表共有N小块蛋糕,小Z最多只能吃M小块。 第二行用空格隔开的N个整数,第i个整数Pi代表第i小块蛋糕的幸运值。 输出格式 输出文件cake.out只有一行,一个整数,为小Z能够得到的最大幸运值。 #include<deque> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=5e5+10; int p[N],l,r; deque<int>q; signed main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++)scanf("%d",&p[i]),p[i]+=p[i-1]; int ans=-(1<<30); for(int i=1;i<=n;i++)

分蛋糕

匿名 (未验证) 提交于 2019-12-03 00:09:02
1 #include < bits / stdc ++. h > 2 3 using namespace std ; 4 5 const int N = 1002 ; 6 int a [ N ]; 7 8 int main () { 9 int n , k ; 10 int weight = 0 ; 11 int num = 0 ; 12 ios :: sync_with_stdio ( false ); 13 cin >> n >> k ; //n代表有n块蛋糕 14 for ( int i = 1 ; i <= n ; i ++){ 15 cin >> a [ i ]; 16 } 17 int i = 1 ; 18 while ( i <= n ){ 19 weight += a [ i ]; 20 if ( weight >= k || i == n ){ 21 num ++; 22 weight = 0 ; 23 } 24 i ++; 25 } 26 cout << num ; 27 return 0 ; 28 } View Code 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   小明今天生日,他有 n 块蛋糕要分给朋友们吃,这 n 块蛋糕(编号为1到 n )的重量分别为 a 1 , a 2 ,

第二章总结

陌路散爱 提交于 2019-12-01 09:11:09
对分治法思想的体会: 分治法:将一个大问题分解成若干个子问题,然后将分出来的这些个子问题逐个击破,最后将已经解决的子问题合成母问题的解。 我觉得就是一块大蛋糕,一口吃不下,把蛋糕分成小块小块的,一个个吃,吃这个动作是一样的,相当于方法一样,所以这个大问题能在把小问题一个个解决后被解决。 结对编程的情况: 第一次和同学共同完成编程,感觉很不错,一起做作业感觉困难都不是困难了,一起讨论,相互吸收对方的想法,有意想不到的惊喜。同样在编程的过程中,能发现一些小细节,自己不足的,对方不足的,及时改正。互相讨论的时候,能发现自己知识点的盲区不足,及时补充改正。 来源: https://www.cnblogs.com/xxnjwz-9/p/11675047.html

洛谷 P1714 切蛋糕

三世轮回 提交于 2019-11-28 01:40:36
洛谷 P1714 切蛋糕 Description 今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。 吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。 Input 输入文件cake.in的第一行是两个整数N,M。分别代表共有N小块蛋糕,小Z最多只能吃M小块。 第二行用空格隔开的N个整数,第i个整数Pi代表第i小块蛋糕的幸运值。 Output 输出文件cake.out只有一行,一个整数,为小Z能够得到的最大幸运值。 Sample Input 6 3 1 -2 3 -4 5 -6 Sample Output 5 Data Size 对20%的数据,N≤100。 对100%的数据,N≤500000,|Pi|≤500。 答案保证在2^31-1之内。 题解: 单调队列。 因为序列是连续的,而且不停的在滑动。所以我就想到了单调队列。然后我就想着普通dp怎么写?首先求一个前缀和,那么枚举右端点,右端点确定了,就在位置(右端点 - m) ~ 位置(右端点)之间找一个最小的前缀和。两数一减,每个右端点取一次max。那么复杂度是O(nm)

[洛谷]P1714 切蛋糕 (#单调队列)

馋奶兔 提交于 2019-11-27 05:55:56
题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。 吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。 输入格式 输入文件cake.in的第一行是两个整数N,M。分别代表共有N小块蛋糕,小Z最多只能吃M小块。 第二行用空格隔开的N个整数,第i个整数Pi代表第i小块蛋糕的幸运值。 输出格式 输出文件cake.out只有一行,一个整数,为小Z能够得到的最大幸运值。 输入输出样例 输入 #1 复制 5 2 1 2 3 4 5 输出 #1 复制 9 输入 #2 复制 6 3 1 -2 3 -4 5 -6 输出 #2 复制 5 说明/提示 对20%的数据,N≤100。 对100%的数据,N≤500000,|Pi|≤500。 答案保证在2^31-1之内。 思路 n个数中取连续的k(k<=m)个数,输出其中所有可能的最大值。 #include <stdio.h> #include <iostream> #include <deque> #define linf -2e9-7 using namespace std; int n,m,s