poj 2454 Jersey Politics dfs】的更多相关文章

这个题目第一步还是比较明显的,先把最小的n个值去掉,剩下的问题就是能不能把数据分成两半,使得每一半和都大于n*500,这个刚开始考虑了下dp的做法,但是复杂度不满足要求. 那么能想到的就是搜索了,实际上这个搜索的上限还是比较高的,就只能依靠良好的剪枝试试了,两个情况,剩下的值全部选最大还小于要求,剩下的值全部选最小另一半还小于要求.0ms ac #include <iostream> #include <cstdio> #include <cstring> #inclu…
随机化算法+贪心! 将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换! 代码如下: #include<iostream> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; struct an { int w,lab; }p[]; bool cmp(const an &a,c…
题目链接 \(Description\) 将长为\(3n\)的序列划分成\(3\)个子序列,要求至少有两个子序列的和都\(\geq 500*n\),输出任一方案.保证有解. \(Solution\) 肯定是要将最大的\(2n\)个数分成两个满足条件的子序列. 直接贪心并没有什么可行的做法..(反正我想不出来) 我们考虑先随便地填满这两个序列,然后再随机交换序列中的两个数,直到最后满足条件为止. 交换两个序列中的某个数在多数情况下是有效的. 并不会证or别的说明了,反正我也没有更好的做法,就随机吧…
题解 有种迷一样的讽刺效果 每个城市有1000头牛,然后你现在知道对于自己政党每个城市的选票,把城市划分成三个州,保证在至少两个州内获胜 找出前2K大的然后random_shuffle,直到前K个加起来和后K个加起来都满足超过半数也就是K × 500 代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #…
                                                        Jersey Politics Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5592   Accepted: 1413   Special Judge Description In the newest census of Jersey Cows and Holstein Cows, Wisconsin co…
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标记,直至放完要求的棋子数. /*POJ 1321 棋盘问题 --- DFS*/ #include <cstdio> #include <cstring> int n, k, cnt; ]; //标记列的访问状态 ][]; /*从第r行开始正确放置p个棋子*/ void dfs(int…
POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根的编号永远是1.每个节点上最多结一个苹果.卡卡想要了解某一个子树上一共结了多少苹果. 现在的问题是不断会有新的苹果长出来,卡卡也随时可能摘掉一个苹果吃掉.你能帮助卡卡吗? 前缀技能 边表存储树 DFS时间戳 线段树 首先利用边表将树存储下来,然后DFS打上时间戳.打上时间戳之后,我们就知道书上节点对…
POJ2454——Jersey Politics 题目大意: 在泽西奶牛和荷斯坦奶牛的最新普查中,威斯康星奶牛在谷仓中获得了三个档位. 泽西奶牛目前控制着国家重新分配委员会. 他们想将国家分为三个相当大的投票地区,以便保证泽西奶牛在至少两个地区获得选举权. 威斯康星州有3 * K(1 <= K = = 60)个1000头牛的城市,编号为1..3 * K,每头都有泽西奶牛的已知数量(范围:1.001). 找到一种将州划分为三个区域的方式,每个区域都有K个城市,使得泽西奶牛在至少两个地区拥有多数比例…
Apple Tree Time Limit: 2000MS   Memory Limit: 65536K       Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple t…
题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高大上的做法,然后题解爸爸告诉我是随机化乱搞…… 首先可以把最小的k个去掉 然后将剩下的2*k个分成2组 接下来随机化交换它们中的两个数,并判断…… 只能说略猥琐…