jsoi

题目描述

奶酪和pizza一样,是一小块扇形的固体。在奶酪从工厂里生产出来的时候,一共有4种形状,编号为1~4,分别是圆心角为72º,144º,216º,288º的扇形。奶酪的盒子是圆形的,半径和奶酪的半径一致。也就是说,一块1号奶酪和一块4号奶酪可以恰好装入一个盒子,一块2号奶酪和一块3号奶酪可以恰好装入一个盒子。你的任务是写一个程序,计算给定的奶酪最多可以装满几个盒子。

1~4号奶酪的数量,都在0~100之内

贪心

由于每步都采用同样的、简单的策略,无论从代码的实现上,还是从时间复杂度上看,都是相当好的选择。

贪心算法如果设计的到位,可以保证在几乎所有情况得到正解答案。

进一步地,当局部最优解可以推出全局最优解时,贪心就是正解答案。

四种奶酪分别为:72º、144º、216º、288º  。

首先考虑可以组合的方法有以下几种:

4+1、3+2、3+1+1、2+2+1、2+1X3、1X5

那么究竟应该先用哪种方案?如果采用类似NOIP乌龟棋的动规,很大可能是会超时。采用搜索似乎效率更低

采取贪心算法:优先选择角度大的奶酪进行组合。

分析:若先使用小的奶酪,则需要大量的小号奶酪,使得之后与大号的匹配时数量不足。

贪心未必要严谨,在实际情况中可以不用数学语言来证明。

它所拥有的简洁性和自由度是其它算法所不能达到的。

若要证明贪心的正确性,需要证明局部全优可以造成全局最优。

贪心老公式:能放就放,大的顺序在前。

#include<iostream>

#include<cstdio>

#include<cstring>

#include<string>

#include<cmath>

#include<cstdlib>

using namespace std;

int main()

{

int a,b,c,d,ans=0;

scanf("%d%d%d%d",&a,&b,&c,&d);

if(d>a)

ans=ans+a,a=0;

else

ans=ans+d,d=0;

if(c>b)

ans=ans+b,b=0;

else

ans=ans+c,c=0;

while(b>=2&&a>=1)

ans++,b=b-2,a--;

while(a>=2&&c>0)

ans++,c--,a=a-2;

while(a>=3&&b>0)

ans++,b--,a=a-3;

printf("%d\n",ans+a/5);

return 0;

}

时间: 2024-10-20 07:24:35

jsoi的相关文章

1819: [JSOI]Word Query电子字典

1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 729  Solved: 238[Submit][Status] Description 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功能的电子字典能够从一定程度上解决这一问题:用户只要输入一个字符串,电子字典就返回与该单词编辑距

[Wikioi 2913][BZOJ 1029][JSOI 2007]建筑抢修

题目描述 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏: 经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间.同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑.如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了.你的

[BZOJ] 1819: [JSOI]Word Query电子字典

1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1072  Solved: 361[Submit][Status][Discuss] Description 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功能的电子字典能够从一定程度上解决这一问题:用户只要输入一个字符串,电子字典

[BZOJ 1012] [JSOI 2008] 最大数maxnumber

1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5094  Solved: 2276[Submit][Status][Discuss] Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. 插入操作.语法:A n 功能:将n加上t,其中t是最近一次

JSOI 2008 最小生成树计数

JSOI 2008 最小生成树计数 今天的题目终于良心一点辣 一个套路+模版题. 考虑昨天讲的那几个结论,我们有当我们只保留最小生成树中权值不超过 $ k $ 的边的时候形成的联通块是一定的. 我们可以先拿 kruskal 跑一棵最小生成树,然后我们可以从小到大枚举边权,把所有除开枚举到的边权的边全部加入并且缩点.现在我们就在这个缩点后的点集进行生成树计数就好了.答案就是每种边权算出答案的积. 因为我们知道,连入 $ k $ 边权的边后对于 $ 1 $ 到 $ k - 1 $ 的边加入后的最小生

BZOJ 1821 JSOI 2010 Group 部落划分 Group Kruskal

题目大意:给出平面上的一些点,现在要把这些点分成k组,求每组之间的距离的最小值的最大值. 思路:很水的题,只需要做一次最小生成树 ,然后去掉k-1条边,第k-2条边就是答案. CODE: #include <cmath> #include <cstdio> #include <iomanip> #include <cstring> #include <iostream> #include <algorithm> #define MAX

JSOI Round 2题解

强行一波题解骗一个访问量好了... http://blog.csdn.net/yanqval/article/details/51457302 http://absi2011.is-programmer.com/posts/200822.html http://absi2011.is-programmer.com/posts/200920.html orz js省队神犇↑ Day1 最佳团队(team) 给一个n+1个点的树,每个点有价值pi和费用si,求一个包含根的大小为m+1的联通块,使价值

【BZOJ 1014】【JSOI 2008】火星人prefix

看得<Hash在信息学竞赛中的一类应用>中的例题3,这道题很类似啊,只不过没有删点和区间翻转. 用Splay维护字符串哈希,加点改点什么的就不用说了,查询时二分答案,这样时间复杂度是$O(mlog^2 n)$的 论文的例题3中删点很简单,和插点一样,不用说了,区间翻转只要打一个翻转标记,维护正序hash和逆序hash,翻转时交换两个hash值即可. 对拍终于成功了QAQ,插点时孩子不认父亲TwT又手残了- <Hash在信息学竞赛中的一类应用>中还提到了块状链表的做法,都很易懂: #

[BZOJ 1015] [JSOI 2008] 星球大战starwar

1015: [JSOI2008]星球大战starwar Time Limit: 3 SecMemory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或间接地连接. 但好景不长,很快帝国又重新造出了他的超级武器.凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球.由于星球的不断被摧毁,两

JSOI最大值 (线段树)

change 单点修改 query 区间最值 1 Program XJOI2321; 2 const maxn=200008; 3 var l,r,max:array[0..maxn*4] of longint; 4 i,m,n,ans,p,x:longint; 5 ch:char; 6 function mx(a,b:longint):longint; 7 begin 8 if a>b then exit(a) else exit(b); 9 end; 10 procedure up(x:lo