NOIP 骗分导论(1)--随机化贪心
来源:互联网 发布:淘宝店铺连接怎么修改 编辑:程序博客网 时间:2024/05/12 15:07
随机化贪心,顾名思义,就是边随机边贪心
这类算法适合解决动态规划类的题目
思想:在贪心原则正确的情况下,随机执行足够多次,就是正解了(涉及到概率学,这里不深究)
不要以为随机到正解几率很小,假设随机到正解的概率为0.1%,我们执行100000次贪心,每次取最优,得到正解的概率是100%
也就是这种贪心也变成了某种意义上的正解
至于例子嘛..
题目来源:http://www.luogu.org/problem/show?pid=1284
有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,利用所有的木板围成一个三角形使得面积最大。 计算出这个最大的面积。输入格式:第1行:一个整数N第2..N+1行:每行包含一个整数,即是木板长度。输出格式:仅一个整数:最大面积乘以100然后舍尾的结果。如果无法构建,输出-1。样例输入:511334样例输出:692动态规划写法比较麻烦
我们考虑贪心,贪心原则不难想到,我们尽量让三边的差小,他的面积就大
所以每次将木板加入当前的最短边即可完成贪心
附上随机化贪心代码和测试详情
#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>using namespace std;int n,a[41],ans=-1;void wash()//随机洗木板顺序{for(int i=1;i<=n;i++){int t=rand()%n;a[0]=a[t];a[t]=a[i];a[i]=a[0];}}int hl(double aa,double bb,double cc)//海伦公式求面积{if(aa+bb>cc&&bb+cc>aa&&aa+cc>bb){double p=(aa+bb+cc)/2;return trunc(sqrt(p*(p-aa)*(p-bb)*(p-cc))*100);}else return -1;}void work()//贪心程序{int p[3],pos;p[0]=a[1];p[1]=a[2];p[2]=a[3];for(int i=4;i<=n;i++){int min=0x7fffffff;for(int j=0;j<=2;j++){if(min>p[j]){min=p[j];pos=j;}}p[pos]+=a[i];}ans=max(ans,hl(p[0],p[1],p[2]));}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=10000;i++){wash();work();}printf("%d\n",ans);return 0;}
一共提交30遍(为了测试概率),AC 30遍
测试点 #1:通过该测试点。 得分9,耗时0ms,内存2052kB。
测试点 #2:通过该测试点。 得分9,耗时0ms,内存2052kB。
测试点 #3:通过该测试点。 得分9,耗时0ms,内存2052kB。
测试点 #4:通过该测试点。 得分9,耗时0ms,内存2048kB。
测试点 #5:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #6:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #7:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #8:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #9:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #10:通过该测试点。 得分9,耗时15ms,内存2052kB。
测试点 #11:通过该测试点。 得分10,耗时31ms,内存2048kB。
实验证明,这是完美的骗分,足足骗了100分。。
0 0
- NOIP 骗分导论(1)--随机化贪心
- [NOIP 2005PJ]采药 随机化贪心
- 【随机化】NOIP 2005 采药
- [NOIP备考]随机化贪心解决动态规划问题(一星)
- POJ 2454 随机化+贪心
- 我读《骗分导论》
- POJ2454:Jersey Politics(贪心+随机化)
- 【codevs1959】拔河比赛 随机化贪心
- 算法导论之随机化快速排序实现
- 算法导论:快速排序及其随机化版本
- 【转】骗分导论(赛前准备)
- 大神cyd的骗分导论
- 【随机化贪心】【动态规划】【NOI2010】成长快乐
- 【搜索】【随机化贪心】【NOI2006】聪明的导游
- poj 2454 Jersey Politics(贪心+随机化)
- 1959 拔河比赛[DP][随机化贪心※]
- 矩阵、随机化与分形图形
- [NOIp复习计划]:贪心
- C++基础---无返回值函数(void函数)
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
- C++/CLI
- Advanced Fruits (LCS+递归、模板)
- 水仙花树的查找--360机试
- NOIP 骗分导论(1)--随机化贪心
- 找出字符串中第一个只出现一次的字符
- CSU 1115 最短的名字
- JavaScricpt面向对象功能的理论基础
- 并发网络编程学习之路(二):多进程与进程池(续)
- Unity中创建二维码
- [图论] 最短路径(Bellman-Ford , SPFA , Floyed , Dijkstra)
- Laravel 5.1.4 + Bootstrap 3.3.5 笔记四:Laravel 控制器
- UVALive 6935 Bricks题解