永发信息网

acm钓鱼问题

答案:1  悬赏:70  手机版
解决时间 2021-02-16 10:42
  • 提问者网友:眉目添风霜
  • 2021-02-15 17:43
Sample Input

2
1
10 1
2 5
2
4
4
10 15 20 17
0 3 4 3
1 2 3
4
4
10 15 50 30
0 3 4 3
1 2 3
0
Sample Output

45, 5
Number of fish expected: 31

240, 0, 0, 0
Number of fish expected: 480

115, 10, 50, 35
Number of fish expected: 724

Source

#include<iostream>
using namespace std;

int main()
{
int n,f[10],t[10],d[10],i,time[10],h,max,fish,x,p,time1;
fish=0;
time1=0;
for(i=1;i<=n;i++)
time[i]=0;
while(1)
{
cin>>n;
if(n==0)
break;
cin>>h;
for(i=1;i<=n;i++)
cin>>f[i];
for(i=1;i<=n;i++)
cin>>d[i];
for(i=1;i<n;i++)
{
cin>>t[i];
t[0]=0;
t[i]+=t[i-1];
}
time1=h*12-t[n-1];
while(time1>0)
{
for(i=1;i<=n;i++)
{
x=f[1];
if(f[i]>=x)
{
x=f[i];
p=i;
}
}
if((f[p]-d[p])>0)
{
fish+=f[p];
f[p]=f[p]-d[p];
time[p]++;
time1--;
}
else
{
fish+=f[p];
f[p]=0;
time[p]++;
time1--;
}
}
for(i=1;i<n;i++)
{
cout<<5*time[i]<<' ';
}
cout<<5*time[n];
cout<<"Number of fish expected:";
cout<<fish;
}
return 0;
}这个我得代码只是不知道45怎么来的所以代码不对不知道45分钟是怎么来的!
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-02-15 18:28
Source Code

Problem: 1042 User: stomach
Memory: 16K Time: 15MS
Language: C++ Result: Accepted

Source Code
#include <stdio.h>

int f[26],d[26],t[26],ff[26],tt[26];
int best_t[26],max_fish,n,h;

int main()
{
int i,j,k,left_time,fish;
while(scanf("%d", &n),n>0)
{
scanf("%d", &h);h*=12;
for(i=0;i<n;i++)
scanf("%d", &f[i]);
for(i=0;i<n;i++)
scanf("%d", &d[i]);
t[0] = 0;
for(i=1;i<n;i++)
{
scanf("%d", &t[i]);
t[i] += t[i-1];
}
int ok = 0;
for(i = 0;i < n;i++) {
if(f[i] == 0)
ok++;
}
if(ok == n) {
printf("%d", h*5);
for(j = 1; j < n; j ++)
printf(", 0", best_t[j]);
printf( "\nNumber of fish expected: 0\n\n" );
}
else {
max_fish = 0;
for(k=n-1;k>=0;k--)
{
left_time = h-t[k];
for(i=0;i<n;i++)
{
ff[i] = f[i];
tt[i] = 0;
}
fish = 0;
while(left_time > 0)
{
j = 0;
for(i=1;i<=k;i++)
{
if(ff[i] > ff[j])
j = i;
}
if(ff[j] == 0)
break;
tt[j] += 5;
fish += ff[j];
ff[j] -= d[j];
if(ff[j] <=0)
ff[j] = 0;
left_time --;
}
tt[0] += left_time*5;
if(fish > max_fish)
{
for(i=0;i<n;i++)
best_t[i] = tt[i];
max_fish = fish;
}
else
if( fish==max_fish )
{
for(i=0;i<n;i++)
if(best_t[i] <= tt[i])
break;
if(i != n)
for(i=0;i<n;i++)best_t[i] = tt[i];
}
}
printf("%d", best_t[0]);
for(j = 1; j < n; j ++)
printf(", %d", best_t[j]);
printf( "\nNumber of fish expected: %d\n\n", max_fish );
}
}

return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯