poj1042(贪心+枚举)
题目链接:https://vjudge.net/problem/POJ-1042
题意:给n个湖,给出每个湖第一次打捞时鱼的数量f[i],每单位时间鱼减少的数量d[i],从湖i到湖i+1用时t[i],在12×h个单位时间内,求最多能获得多少鱼。在获得鱼数量相同的情况下,选择在湖1呆时间最长的方案,若在湖1呆的时间一样,则选呆在湖2时间最长的方案...输出在每个湖呆的时间和最多获得鱼的数量。
思路:最近3天学校开运动会,下周要去西安邀请赛了,所以最近开始通过刷题复习学过的算法。今天状态真的不怎么好,昨晚睡得不好,上午11点多开了这道题,最开始从DP角度想,想好久也没有头绪,看了网上大部分用贪心写的,也有用dp的,今天累,不想研究dp的思路。。。就用贪心来写把。因为各种原因这题写了一下午,各种找bug,心态爆炸,也不知道是因为状态不好还是题目坑QAQ...
好吧,回到题目上来。贪心思路很简单,也很巧妙。枚举最多到达湖i,然后用时间h减去中间行走的时间,剩下的时间就是花在钓鱼上的时间啦。不用考虑行走的时间,这时候由贪心策略,每次找当前能钓到最多鱼的湖去钓,而不一定是后面的湖,这里稍微想一想,不难理解。
再说一下我在写这题时遇到的问题吧QAQ。最开始提交是TLE,我懵逼了。。这数据!这复杂度怎么会T,找好久发现while循环那出现了死循环,因为hh可能<0,这个时候要break。然后就是一直WA,WA了十多发,WA哭。。原因是这组数据:
2
1
0 0
1 1
1
答案是0,但我最终找k时,应该将k初始化为1,再找,不然k是随机的。。累。。
AC代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; int n,h;
int t[],f[],d[];
int ans1[][],ans2[]; int main(){
while(scanf("%d",&n),n){
for(int i=;i<=n;++i){
ans2[i]=;
for(int j=;j<=n;++j)
ans1[i][j]=;
}
scanf("%d",&h);
h*=;
for(int i=;i<=n;++i)
scanf("%d",&f[i]);
for(int i=;i<=n;++i)
scanf("%d",&d[i]);
for(int i=;i<=n-;++i)
scanf("%d",&t[i]);
for(int i=;i<=n;++i){
int nw[],hh=h;
for(int j=;j<=i;++j){
nw[j]=f[j];
if(j<i) hh-=t[j];
}
if(hh<=) break;
while(hh--){
int Max=nw[],k=;
for(int j=;j<=i;++j)
if(nw[j]>Max){
Max=nw[j];
k=j;
}
nw[k]-=d[k];
if(nw[k]<) nw[k]=;
ans2[i]+=Max;
++ans1[i][k];
}
}
int k=,Max=ans2[k];
for(int i=;i<=n;++i)
if(ans2[i]>Max)
k=i,Max=ans2[i];
for(int i=;i<=n;++i){
if(i!=) printf(", ");
printf("%d",ans1[k][i]*);
}
printf("\n");
printf("Number of fish expected: %d\n\n",ans2[k]);
}
return ;
}
poj1042(贪心+枚举)的更多相关文章
- POJ 1018 Communication System 贪心+枚举
看题传送门:http://poj.org/problem?id=1018 题目大意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m个厂家提供生产,而每个厂家生产的同种设备都 ...
- 【搜索】POJ-2718 贪心+枚举
一.题目 Description Given a number of distinct decimal digits, you can form one integer by choosing a n ...
- [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举
[APIO2015]巴厘岛的雕塑 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...
- 51nod1475(贪心&枚举)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1475 题意:中文题诶- 思路:看懂题意后,首先想到的是贪心: ...
- hdu 4091 Zombie’s Treasure Chest 贪心+枚举
转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...
- HDU 5303 Delicious Apples (贪心 枚举 好题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 贪心+枚举/哈希表 HDOJ Trouble
题目传送门 题意:5个集合,每个集合最多200个数字,问是否每个集合挑一个数加起来和为0. 分析:显然n^5的程序果断超时,甚至n^3logn的二分也过不了.想n^3的方法,既然判断有没有,那么可以将 ...
- Delicious Apples (hdu 5303 贪心+枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
随机推荐
- linux 能ping通IP但无法解析域名
vi /etc/nsswitch.conf hosts: files dns networks: files 改成: hosts: files dns wins networks: files 最近碰 ...
- 15、Qt 样式表
Qt的样式表类似HTML的层叠式样式表CSS,可以为一个独立的子部件.整个窗口.整个应用程序指定一种外表样式. 样式表功能:1.优化外观.2.实现某些动作,如鼠标在图片上,图片切换. 格式:QWidg ...
- UVa 1592 Database (map)
题意:给出n行m列的数据库(数据范围: n 1~10000, m 1~10), 问你能不能找出两行r1, r2,使得这两行中的c1, c2列是一样的, 即(r1,c1)==(r2,c1) && ...
- CentOS7 服务器上如何安装python3
1.官网下载python3的源码包 网址:https://www.python.org/ 进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code, ...
- UE4 使用VaRest的最佳实践
背景介绍: 用Node.js,express,Mongo搭建了一个简单后台,为项目提供REST风格的API服务. 第一个查询是通过Get进行,返回一个json字符串. 在虚幻里使用VaRest来进行访 ...
- Mysql启动报错 The server quit without updating PID
[root@db mysql]# service mysql restartMySQL server PID file could not be found![失败]Starting MySQL... ...
- C++入门经典-例6.7-字符串比较
1:strcmp函数,用于比较两个字符串.格式如下: strcmp(字符数组名1,字符数组名2) 按照ASCII码,按顺序比较两个数组中的字符,并由函数返回值返回比较结果的执行过程. (1)各自选中自 ...
- oracle存储过程及sql优化-(二)
接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解 PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR, P ...
- 套接字之select系统调用
select是IO多路复用的一种方式,用来等待一个列表中的多个描述符的可读可写状态: SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_ ...
- 191112Django项目常用配置
创建项目 >django-admin startproject project01 创建应用 >python manage.py startapp app01 settings.py 配置 ...