(一)贪心

1.A - 今年暑假不AC

“今年暑假不AC?” 
“是的。” 
“那你干什么呢?” 
“看世界杯呀,笨蛋!” 
“@#$%^&*%...”

确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。 
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目) 

Input输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。 
Output对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。Sample Input

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

Sample Output

5
解题思路:贪心思路:将每个数据用pair储存起来,根据结束时间进行从小到大排序,在循环模拟时,若果下一个的起始时间<上一个的结束时间,
则可以++,并将该结束时间作为下回判断的结束时间;否则循环下一个。
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define x first
#define y second
using namespace std;
const int N=;
typedef pair<int,int> PII;
int t;
PII f[N];
int main()
{
int s,e,i,j,n;
while(scanf("%d",&n)&&n)
{
for(i=;i<n;i++)
{
scanf("%d%d",&s,&e);
f[i].x=e,f[i].y=s;
}
sort(f,f+n);
int ans=;
int tem=f[].x;
for(i=;i<n;i++)
{
if(f[i].y>=tem)
{
ans++;
tem=f[i].x;
}
}
cout<<ans<<endl;
}
return ;
}

2.B - 迷瘴

通过悬崖的yifenfei,又面临着幽谷的考验—— 
幽谷周围瘴气弥漫,静的可怕,隐约可见地上堆满了骷髅。由于此处长年不见天日,导致空气中布满了毒素,一旦吸入体内,便会全身溃烂而死。 
幸好yifenfei早有防备,提前备好了解药材料(各种浓度的万能药水)。现在只需按照配置成不同比例的浓度。 
现已知yifenfei随身携带有n种浓度的万能药水,体积V都相同,浓度则分别为Pi%。并且知道,针对当时幽谷的瘴气情况,只需选择部分或者全部的万能药水,然后配置出浓度不大于 W%的药水即可解毒。 
现在的问题是:如何配置此药,能得到最大体积的当前可用的解药呢? 
特别说明:由于幽谷内设备的限制,只允许把一种已有的药全部混入另一种之中(即:不能出现对一种药只取它的一部分这样的操作)。 
 

Input输入数据的第一行是一个整数C,表示测试数据的组数; 
每组测试数据包含2行,首先一行给出三个正整数n,V,W(1<=n,V,W<=100); 
接着一行是n个整数,表示n种药水的浓度Pi%(1<=Pi<=100)。 
Output对于每组测试数据,请输出一个整数和一个浮点数; 
其中整数表示解药的最大体积,浮点数表示解药的浓度(四舍五入保留2位小数); 
如果不能配出满足要求的的解药,则请输出0 0.00。 
Sample Input

3
1 100 10
100
2 100 24
20 30
3 100 24
20 20 30

Sample Output

0 0.00
100 0.20
300 0.23
解题思路:贪心思路就是优先选择浓度低的,对所有解药进行sort排序,再结合前缀和,从后往前进行遍历,找到第一个浓度小于等于目标浓度的体积时
结束,输出;特别注意:double x=((s[i]*1.0/100)*v)/((i+1)*v);
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int c,n,v;
int f[],s[];
int w;
int main()
{
int i,j;
cin>>c;
while(c--)
{
cin>>n>>v>>w;
for(i=;i<n;i++)
cin>>f[i];
double dow=w/100.00;
sort(f,f+n);
s[]=f[];
for(i=;i<n;i++)
{
s[i]=s[i-]+f[i];
}
bool flag=false;
for(i=n-;i>=;i--)
{
double x=((s[i]*1.0/)*v)/((i+)*v);
if(x<dow||fabs(x-dow)<1e-)
{
flag=true;
cout<<(i+)*v<<" ";
printf("%.2f\n",x);
break;
}
}
if(flag==false)
cout<<"0 0.00"<<endl;
}
return ;
}

(二)模拟退火

1.Strange fuction

Now, here is a fuction: 
  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) 
Can you find the minimum value when x is between 0 and 100.

Input

The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)

Output

Just the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.Sample Input

2
100
200

Sample Output

-74.4291
-178.8534
解题思路:该题可用二分的思想来解决。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double find(double x,double y)
{
return *pow(x,)+*pow(x,)+*pow(x,)+*pow(x,)-y*x;
} double check(double y)
{
double l=,r=;
while(r-l>1e-)
{
double mid=(l+r)/;
double rmid=(mid+r)/;
if(find(mid,y)<find(rmid,y))
r=rmid;
else
l=mid;
}
return l;
} int main()
{
int t,i;
double y;
cin>>t;
while(t--)
{
cin>>y;
double key=check(y);
printf("%.4f\n",find(key,y));
}
return ;
}

												

贪心+huffman编码+模拟退火+分治(一)的更多相关文章

  1. [老文章搬家] 关于 Huffman 编码

    按:去年接手一个项目,涉及到一个一个叫做Mxpeg的非主流视频编码格式,编解码器是厂商以源代码形式提供的,但是可能代码写的不算健壮,以至于我们tcp直连设备很正常,但是经过一个UDP数据分发服务器之后 ...

  2. Huffman编码

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cstri ...

  3. 【数据压缩】Huffman编码

    1. 压缩编码概述 数据压缩在日常生活极为常见,平常所用到jpg.mp3均采用数据压缩(采用Huffman编码)以减少占用空间.编码\(C\)是指从字符空间\(A\)到码字表\(X\)的映射.数据压缩 ...

  4. 优先队列求解Huffman编码 c++

    优先队列小析      优先队列的模板: template <class T, class Container = vector<T>,class Compare = less< ...

  5. Huffman编码实现电文的转码与译码

    //first thing:thanks to my teacher---chenrong      Dalian Maritime university /* 构造Huffman Tree思路: ( ...

  6. huffman 编码

    huffman压缩是一种压缩算法,其中经典的部分就是根据字符出现的频率建立huffman树,然后根据huffman树的构建结果标示每个字符.huffman编码也称为前缀编码,就是每个字符的表示形式不是 ...

  7. 基于二叉树和数组实现限制长度的最优Huffman编码

    具体介绍详见上篇博客:基于二叉树和双向链表实现限制长度的最优Huffman编码 基于数组和基于链表的实现方式在效率上有明显区别: 编码256个符号,符号权重为1...256,限制长度为16,循环编码1 ...

  8. uvalive 2088 - Entropy(huffman编码)

    题目连接:2088 - Entropy 题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的 ...

  9. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

随机推荐

  1. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  2. 空气质量管理系统ssm(mybatis+spring+springMVC)框架+前后端分离

    1.目录结构: 2.需要注意的地方 2.1在WEB-INFO下新建 2.1.1 springMVC-servlet.xml <?xml version="1.0" encod ...

  3. Raid相关操作与注意事项记录

    Raid相关操作与注意事项 Raid5 SATA盘组成的Raid5,在保护数据的前提下达到高性能: RAID要有BBU Current Cache Policy采用WriteBack,No Write ...

  4. 使用spring boot中的JPA操作数据库

    前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添 ...

  5. C#反射与特性(二):探究反射

    目录 1,反射的使用概述 2,获取 Type 在上一章中,我们探究了 C# 引入程序集的各种方法,这一章节笔者将探究 C# 中使用反射的各种操作和代码实践. 1,反射的使用概述 1.1 什么是反射 & ...

  6. Python 植物大战僵尸代码实现: 图片加载和显示切换

    游戏介绍以前很火的植物大战僵尸游戏, 本想在网上找个python版本游戏学习下,无奈没有发现比较完整的,那就自己来写一个把.图片资源是从github上下载的,因为图片资源有限,只能实现几种植物和僵尸. ...

  7. 9.python中sys.argv[]用法说明

    在python中sys.argv[]是用来获取命令行输入的参数的(参数和参数之间空格区分),sys.argv[0]表示代码本身文件路径,所以从参数1开始,表示获取的参数了 举例说明:创建一个程序名为t ...

  8. 【Java基础总结】字符串

    1. java内存区域(堆区.栈区.常量池) 2. String length() //长度 //获取子串位置 indexOf(subStr) lastIndexOf(subStr) //获取子串 c ...

  9. JS获取时间戳的几种方法与区别

    var today = new Date() Date.now()) Date.parse(today) today.valueOf()) today.getTime() 可以看出,第二种是精确到秒的 ...

  10. css3让元素自适应高度

    知识点: viewport:可视窗口,也就是浏览器.vw Viewport宽度, 1vw 等于viewport宽度的1%vh Viewport高度, 1vh 等于viewport高的的1% calc( ...