![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
文章平均质量分 57
yrleep
大学毕业不久,ios游戏自由开发者。
展开
-
poj 3614 Sunscreen 贪心
题意:每一头牛有一个接受的防晒霜指数范围,给你每种防晒霜的个数和防晒指数,问最多几头牛能防晒。网络流解法 : 构图非常简单,源点向每种瓶子连一条瓶子个数的边,瓶子跟能接受的牛连接一条容量为1的边,每头牛向汇点连接一条边容量为1的边,但是这样的话复杂度会比较高,因为点有2500之多。但是比较高效的网络流解法能过。贪心解法: 先讲牛头按minspf排序,瓶子也排序。然后从防原创 2013-04-17 18:16:20 · 1066 阅读 · 0 评论 -
poj 3270 贪心
贪心,从值最小的开始交换,把该位置的值换过来,但是如果值最小的已经在正确位置上了,那么就有两种方式,一种是从值次小的开始交换,第二种是把次小的值跟最小值交换,然后从最小值交换,贪心的时候取两者最优即可。#include #include #include #include using namespace std;const int maxn=1e4+9;int a[maxn],b[原创 2013-08-31 23:11:03 · 807 阅读 · 0 评论 -
poj 3040 Allowance 贪心
贪心,从大到小排序,只要不超额就能放多少就放多少,最后再从小的开始找一个放进去能超额的。正确性证明,因为大的是小的倍数,所以大的放进去不超额一定要放进去,因为小的不管怎么取,再超过c之前一定会凑成这个大的面额,那么用大的代替一定更优。第一步做完之后,那么现在一定要再放进去一个硬币,那么选择最小的并且能大于c的也一定是最优的。#include #include #include #原创 2013-09-04 22:39:49 · 983 阅读 · 0 评论 -
poj 3659 Cell Phone Network 贪心
这个题目本来应该用简单的树形dp来做的但是一开始就想错了先用了统计叶子节点的做法但是因为中间会出现一些已经亮了但是没有建造灯塔的点最后就用贪心一贪到底了具体做法见代码#include#include#includeusing namespace std;const int maxn=11111;struct{ int next,to,ture;}e[maxn原创 2013-04-14 19:40:42 · 628 阅读 · 0 评论 -
poj Fence Repair 贪心
反过来做,就是要合成一个板,容易想到每次选取最小的两块合并,结果最优。#include #include #include #include #define ll long longusing namespace std;const int maxn=2e4+9;int main(){ int n; priority_queue ,greater > q;原创 2013-09-25 01:25:35 · 1184 阅读 · 0 评论 -
zoj Candies 贪心
根据题目可知3K位置的数量是可以直接确定的,并且n-2-3*k的也可以确定。所以只要这两部分不重合,答案就是确定的,或者有额外的位置是原来就已知,也是确定的。答案不确定的情况下,容易知道,有%3==1位置是同时取到最大值的,mod3==2也是同时取到最大值的。所以可以分别求出这两部分的最大值,然后O(1)回答。#include #include #include using name原创 2013-09-25 00:56:39 · 1106 阅读 · 0 评论 -
poj 2431 Expedition 贪心
简单的说说思路,如果一开始能够去到目的地那么当然不需要加油,否则肯定选择能够够着的油量最大的加油站加油,,不断重复这个贪心的策略即可。#include #include #include #include #include using namespace std;const int maxn=1e4+9;int dist,p,n;struct S{ int d,f原创 2013-09-27 14:40:44 · 1138 阅读 · 0 评论 -
poj 2433 Landscaping 贪心
很想知道这个题目有没人用dp做的。因为我一开始想到的就是dp,但是没设计出有效的解法。但是其实这个题目应该还是比较明显的符合贪心的性质的,那么直接贪一下就好了。#include #include #include using namespace std;const int maxn=1e3+9;int a[maxn];int n,k;int work(){ in原创 2013-09-27 01:08:41 · 1825 阅读 · 0 评论 -
poj 2376 Cleaning Shifts 贪心
每次选择开头被覆盖的最大的值#include #include #include using namespace std;const int maxn=1e6+9;int dp[maxn];int main(){ int n,t; while(scanf("%d %d",&n,&t)!=EOF) { memset(dp,0,sizeof原创 2013-10-16 23:54:11 · 767 阅读 · 0 评论