贪心
文章平均质量分 57
yrleep
大学毕业不久,ios游戏自由开发者。
展开
-
poj 3614 Sunscreen 贪心
题意:每一头牛有一个接受的防晒霜指数范围,给你每种防晒霜的个数和防晒指数,问最多几头牛能防晒。 网络流解法 : 构图非常简单,源点向每种瓶子连一条瓶子个数的边,瓶子跟能接受的牛连接一条容量为1的边,每头牛向汇点连接一条边容量为1的边,但是这样的话复杂度会比较高,因为点有2500之多。但是比较高效的网络流解法能过。 贪心解法: 先讲牛头按minspf排序,瓶子也排序。然后从防原创 2013-04-17 18:16:20 · 1069 阅读 · 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 · 809 阅读 · 0 评论 -
poj 3040 Allowance 贪心
贪心,从大到小排序,只要不超额就能放多少就放多少,最后再从小的开始找一个放进去能超额的。 正确性证明,因为大的是小的倍数,所以大的放进去不超额一定要放进去,因为小的不管怎么取,再超过c之前一定会凑成这个大的面额,那么用大的代替一定更优。 第一步做完之后,那么现在一定要再放进去一个硬币,那么选择最小的并且能大于c的也一定是最优的。 #include #include #include #原创 2013-09-04 22:39:49 · 986 阅读 · 0 评论 -
poj 3659 Cell Phone Network 贪心
这个题目本来应该用简单的树形dp来做的 但是一开始就想错了 先用了统计叶子节点的做法 但是因为中间会出现一些已经亮了但是没有建造灯塔的点 最后就用贪心一贪到底了 具体做法见代码 #include #include #include using namespace std; const int maxn=11111; struct { int next,to,ture; }e[maxn原创 2013-04-14 19:40:42 · 629 阅读 · 0 评论 -
poj Fence Repair 贪心
反过来做,就是要合成一个板,容易想到每次选取最小的两块合并,结果最优。 #include #include #include #include #define ll long long using namespace std; const int maxn=2e4+9; int main() { int n; priority_queue ,greater > q;原创 2013-09-25 01:25:35 · 1186 阅读 · 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 · 1110 阅读 · 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 · 1141 阅读 · 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 · 1826 阅读 · 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 · 769 阅读 · 0 评论