hdu - 3952 Fruit Ninja(简单几何)】的更多相关文章

思路来自于:http://www.cnblogs.com/wuyiqi/archive/2011/11/06/2238530.html 枚举两个多边形的两个点组成的直线,判断能与几个多边形相交 因为最佳的直线肯定可以经过某两个点(可以平移到顶点处),所以暴力枚举两个点就好了 如果有模版的话,写代码就快多了. 代码如下: #include <cstdio> #include <cstring> #include <cstdlib> #include <algorit…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000 Recently, dobby is addicted in the Fruit Ninja. As you know, dobby is a free elf, so unlike other elves, he could do whatever he wants.But the hands of the elves are somehow strange, so when he cuts…
Fruit Ninja Extreme Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 880    Accepted Submission(s): 231 Special Judge Problem Description Cut or not to cut, it is a question. In Fruit Ninja, com…
搜索+最优性剪枝. DFS的下一层起点应为当前选择的 i 的下一个,即DFS(i + 1)而不是DFS( cur + 1 ),cur+1代表当前起点的下一个.没想清楚,TLE到死…… #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; ; struct node { int t, id; int cnt; ]; };…
http://acm.hdu.edu.cn/showproblem.php?pid=4116 题意:给N个圆,求一条直线最多能经过几个圆?(相切也算) 思路:枚举中心圆,将其他圆的切线按照极角排序,并赋上权值(1\-1),那么我们for一遍,sum随时加上权值,当sum最大时,就可以更新答案. #include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<…
给你N的一个排列,求满足:a[i] < a[k] < a[j] 并且i < j < k的三元组有多少个. 一步转化: 求出所有满足 a[i] < a[k] < a[j] 并且i < j < k的三元组 与 a[i] < a[k] < a[j] 并且i < k < j的三元组 的个数的总和,设high[i]为在 i 右侧且大于a[i] 的数的个数,上述总和即为:high[i] * (high[i] - 1) / 2. 设low[i]为在…
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <algorithm> # define MAX 33 using namespace std; stru…
对t进行从小到大排序(要记录ID),然后直接dfs. 剪枝的话,利用A*的思想,假设之后的全部连击也不能得到更优解. 因为要回溯,而且由于每次cut 的数目不会超过10,所以需要回溯的下标可以利用一个二进制保存. 由于cut最多30个,所以方案也可以用一个二进制保存. #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<stack>…
题目大意:题目就是描述的水果忍者. N表示以下共有 N种切水果的方式. M表示有M个水果需要你切. W表示两次连续连击之间最大的间隔时间. 然后下N行描述的是 N种切发 第一个数字C表示这种切法可以切多少个水果. 第二个数字表示这种切法所处在的时间. 后C个数字表示此时这种切法所切掉的水果编号. 注意:同时切3个以上才表示连击,一个水果最多只能切一次. 思路:直接暴搜,再去加剪枝. #include <iostream> #include <cstdio> #include <…
题意:给你一串数且每个数都不同,问你(x,y,z)出现 x<z<y 的总次数 首先我们直接想的话不能使用O(n*log2 n)解决,所以可以正难则反 可以求得x<(y,z)的值,减去的x<y<z就好了 x<(y,z):每一位后面比此大的个数V,使用V*(V-1)/2求 x<y<z:前面POJ 3928就是求这个(使用两次树状数组) #include<set> #include<map> #include<queue> #i…