自己的代码和算法功底还不错,明确了算法后,20分钟敲完这么恶心的程序,调了几个小bugAC。
//============================================================================
//
// > File : poj1042.cpp
// > Author : flowertree
// > Time : 2015年12月16日
// > Algorithm : 恶心贪心
//
//============================================================================
#include <iostream>
using namespace std;
#define MAX 30
struct node
{
int time[MAX];
int sum;
};
node a[MAX];
int n;
int h;
int di[MAX];
int fi[MAX];
int ti[MAX];
int tempfi[MAX];
void DP()
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
a[i].time[j] = 0;
a[i].sum = 0;
}
for(int i = 0; i < n; i++)
{
for(int i = 0; i < n; i++)
tempfi[i] = fi[i];
int timesum = h * 60;
int fishsum = 0;
int roadtime = 0;
for(int j = 0; j < i; j++)
{
roadtime += ti[j] * 5;
timesum -= ti[j] * 5;
}
if(timesum <= 0)
{
a[i].sum = 0;
continue;
}
while(timesum > 0)
{
int maxfish = 0;
int mark = 0;
for(int k = 0; k <= i; k++)
{
if(tempfi[k] > maxfish)
{
maxfish = tempfi[k];
mark = k;
}
}
timesum -= 5;
fishsum += tempfi[mark];
tempfi[mark] -= di[mark];
a[i].time[mark] += 5;
if(tempfi[mark] < 0)
tempfi[mark] = 0;
}
a[i].sum = fishsum;
}
}
int getmax()
{
int maxfish = 0;
int mark;
for(int i = 0; i < n; i++)
{
if(a[i].sum > maxfish)
{
maxfish = a[i].sum;
mark = i;
continue;
}
if(a[i].sum == maxfish)
{
bool flag = false;
for(int j = 0; j < n; j++)
{
if(a[mark].time[j] > a[i].time[j])
break;
if(a[mark].time[j] < a[i].time[j])
{
flag = true;
break;
}
}
if(flag)
{
mark = i;
}
}
}
return mark;
}
int main()
{
while(cin >> n && n)
{
cin >> h;
for(int i = 0; i < n; i++)
cin >> fi[i];
for(int i = 0; i < n; i++)
cin >> di[i];
for(int i = 0; i < n - 1; i++)
cin >> ti[i];
DP();
int temp = getmax();
for(int i = 0; i < n - 1; i++)
{
cout << a[temp].time[i] << "," << " ";
}
cout << a[temp].time[n - 1] << endl;
cout << "Number of fish expected: " << a[temp].sum << endl << endl;
}
system("pause");
return 0;
}