poj-1042 && nyoj-30(Gone fishing)
2014-01-17 19:25
489 查看
题目链接:poj ->http://poj.org/problem?id=1042
nyoj->http://acm.nyist.net/JudgeOnline/problem.php?pid=30
题意;有n个湖,每个湖都有fi条鱼,每钓一次就会减少di条鱼,
问一个人在给定的时间内在按照从 1~n 湖中钓的鱼最多是多少,
并输出这个人在些湖中停留的时间
题解: 贪心 + 枚举
注: 枚举所有情况(即1~n的湖)每次找湖中鱼最大的
#include<stdio.h>
#include<string.h>
int f1[30],f2[30];
int t[30],t1[30],t2[30];
int res[30];
int main()
{
int n,m,i,j,ret,q = 0;
int time, time1 , time2;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
time = m * 60;
memset(f2,0,sizeof(f2));
for(i = 0 ; i < n; i ++)
{
scanf("%d",&f1[i]);
f2[i] = f1[i] ;
}
for(i = 0 ; i < n; i ++) scanf("%d",&res[i]);
for(i = 1; i < n;i ++) scanf("%d",&t[i]);
if(q) printf("\n");
q = 1;
int Max = -1;//这个max要小于0
memset(t2,0,sizeof(t2));
for(i = 0 ; i < n; i ++)
{
memset(t1,0,sizeof(t1));
for(j = 0; j < n ; j ++) f1[j] = f2[j];//还原
time1 = time;
for(j = 0 ; j <= i;j ++) time1 -= t[j] * 5;//去湖之间所用的时间
time2 = time1;
int sum = 0;
while(time2 > 0)
{
int max = 0;//注:这个max要等于0
int flag = 0,p=0;
for(j = 0 ; j <= i; j ++) //每次查找鱼最多的湖
{
if(max < f1[j])
{
max = f1[j];
p = j ;
flag = 1;
}
}
if(flag) t1[p] += 5;
sum += max ;
if(f1[p] > 0) f1[p] -= res[p] ;
time2 -= 5;
}
if(Max < sum )
{
Max = sum ;
ret = time1;
for(j = 0 ; j < n ; j ++)
t2[j] = t1[j] ;
}
}
int ans = 0 ;
for(i = 1; i < n;i ++) ans += t2[i];
t2[0] = ret - ans ;
printf("%d",t2[0]);
for(i = 1; i < n;i ++)
printf(", %d",t2[i]);
printf("\n");
printf("Number of fish expected: %d\n",Max);
}
}
nyoj->http://acm.nyist.net/JudgeOnline/problem.php?pid=30
题意;有n个湖,每个湖都有fi条鱼,每钓一次就会减少di条鱼,
问一个人在给定的时间内在按照从 1~n 湖中钓的鱼最多是多少,
并输出这个人在些湖中停留的时间
题解: 贪心 + 枚举
注: 枚举所有情况(即1~n的湖)每次找湖中鱼最大的
#include<stdio.h>
#include<string.h>
int f1[30],f2[30];
int t[30],t1[30],t2[30];
int res[30];
int main()
{
int n,m,i,j,ret,q = 0;
int time, time1 , time2;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
time = m * 60;
memset(f2,0,sizeof(f2));
for(i = 0 ; i < n; i ++)
{
scanf("%d",&f1[i]);
f2[i] = f1[i] ;
}
for(i = 0 ; i < n; i ++) scanf("%d",&res[i]);
for(i = 1; i < n;i ++) scanf("%d",&t[i]);
if(q) printf("\n");
q = 1;
int Max = -1;//这个max要小于0
memset(t2,0,sizeof(t2));
for(i = 0 ; i < n; i ++)
{
memset(t1,0,sizeof(t1));
for(j = 0; j < n ; j ++) f1[j] = f2[j];//还原
time1 = time;
for(j = 0 ; j <= i;j ++) time1 -= t[j] * 5;//去湖之间所用的时间
time2 = time1;
int sum = 0;
while(time2 > 0)
{
int max = 0;//注:这个max要等于0
int flag = 0,p=0;
for(j = 0 ; j <= i; j ++) //每次查找鱼最多的湖
{
if(max < f1[j])
{
max = f1[j];
p = j ;
flag = 1;
}
}
if(flag) t1[p] += 5;
sum += max ;
if(f1[p] > 0) f1[p] -= res[p] ;
time2 -= 5;
}
if(Max < sum )
{
Max = sum ;
ret = time1;
for(j = 0 ; j < n ; j ++)
t2[j] = t1[j] ;
}
}
int ans = 0 ;
for(i = 1; i < n;i ++) ans += t2[i];
t2[0] = ret - ans ;
printf("%d",t2[0]);
for(i = 1; i < n;i ++)
printf(", %d",t2[i]);
printf("\n");
printf("Number of fish expected: %d\n",Max);
}
}
相关文章推荐
- NYOJ 30 && POJ 1042 Gone Fishing(枚举+贪心)
- poj 1700 Crossing River && nyoj 47 过河问题
- nyoj 226 && hdu HDU 1348 && poj 1113 wall [凸包周长]
- nyoj 349&Poj 1094 Sorting It All Out——————【拓扑应用】
- poj 1042 Gone Fishing
- POJ 3233 && NYOJ 298 Matrix Power Series(矩阵快速幂)
- Nyoj 30 Gone Fishing
- POJ 1042 Gone fishing(枚举+贪心)
- POJ-1700 &&NYOJ 47 过河问题【贪心】
- NYOJ 426 && poj 1125 最短路 DFS 判断联通 SPFA
- Poj-1185 & Nyoj-81 炮兵阵地 (状态压缩动态规划经典题
- bzoj 5029 && poj 2528 && nyoj 1009: 贴小广告(线段树)
- nyoj586 &poj 2456
- Poj/OpenJudge 1042 Gone Fishing
- poj 1042 Gone Fishing
- poj 1042 Gone Fishing 枚举+贪心
- NYOJ 191 && POJ 1012 Joseph(约瑟夫环问题)
- nyoj 163 Phone List && poj 3630 Phone List <字典树 动态建树&&静态建树>
- poj_1042_Gone Fishing
- NYOJ 586 疯牛 & POJ 2456(二分搜索 + 贪心)