减肥屏保图片大全可爱:Gone Fishing 贪心算法
来源:百度文库 编辑:偶看新闻 时间:2024/10/02 18:21:02
POJ 1042 Gone Fishing 贪心算法 2006-05-27 14:30:05 大 中 小 看上去比较难,看了报告分析就会觉得很简单了。贪心算法就能搞定,由于数据规模不大,因此每次都用遍历求最大值就能过了,但是我还是决定用堆去坐。普通遍历一次最大值复杂度O(N),用堆的话是O(logN)。以前不怎么用堆,这次也算用了呵呵。 题目: http://acm.pku.edu.cn/JudgeOnline/problem?id=1042 解体报告: http://zhaoyonghui.googlepages.com/POJ_1042.rar 代码如下: /***************************************
Author: 赵永辉
Date: 2006.05.27 *****************************************/ #include
#include
#include
#include
#include
#include
using namespace std; #define min(a, b) ((a) < (b) ? (a):(b))
#define max(a, b) ((a) > (b) ? (a):(b))
#define INTMAX 1000000000
const double PI = 3.141592653589793238462643383279502884197169399375105820974944; #define MAX 28
int n, h;
int d[MAX], t[MAX];
int temp[MAX], stay[MAX];
int i, j, r;
struct fish
{
int f;
int index;
bool operator < (const fish &a) const
{
if(f < a.f)
return true;
else if(f == a.f)
return index > a.index;
else
return false;
}
}; fish f[MAX], now[MAX];
int ans, tans;
int main()
{
while(cin >> n && n)
{
ans = -1;
cin >> h;
for(i = 0; i < n; i ++)
{
cin >> f[i].f;
f[i].index = i;
}
for(i = 0; i < n; i ++)
cin >> d[i]; t[0] = 0;
for(i = 1; i < n; i ++)
{
cin >> t[i];
t[i] = t[i - 1] + t[i];
}
for(i = 1; i <= n; i ++)
{
memcpy(now, f, sizeof(f));
memset(temp, 0, sizeof(temp));
r = h*12 - t[i - 1];
tans = 0;
make_heap(now, now + i, less());
for(j = 1; j <= r; j ++)
{
if(now[0].f > 0)
tans += now[0].f;
now[0].f -= d[now[0].index];
now[0].f = max(now[0].f, 0);
temp[now[0].index] += 5;
pop_heap(now, now + i, less());
push_heap(now, now + i, less());
}
if(tans > ans)
{
ans = tans;
memcpy(stay, temp, sizeof(stay));
}
}
for(i = 0; i < n - 1; i ++)
cout << stay[i] <<", ";
cout << stay[n - 1] << endl;
cout <<"Number of fish expected: "<< ans < }
return 0;
}
Author: 赵永辉
Date: 2006.05.27 *****************************************/ #include
#include
#include
#include
#include
#include
using namespace std; #define min(a, b) ((a) < (b) ? (a):(b))
#define max(a, b) ((a) > (b) ? (a):(b))
#define INTMAX 1000000000
const double PI = 3.141592653589793238462643383279502884197169399375105820974944; #define MAX 28
int n, h;
int d[MAX], t[MAX];
int temp[MAX], stay[MAX];
int i, j, r;
struct fish
{
int f;
int index;
bool operator < (const fish &a) const
{
if(f < a.f)
return true;
else if(f == a.f)
return index > a.index;
else
return false;
}
}; fish f[MAX], now[MAX];
int ans, tans;
int main()
{
while(cin >> n && n)
{
ans = -1;
cin >> h;
for(i = 0; i < n; i ++)
{
cin >> f[i].f;
f[i].index = i;
}
for(i = 0; i < n; i ++)
cin >> d[i]; t[0] = 0;
for(i = 1; i < n; i ++)
{
cin >> t[i];
t[i] = t[i - 1] + t[i];
}
for(i = 1; i <= n; i ++)
{
memcpy(now, f, sizeof(f));
memset(temp, 0, sizeof(temp));
r = h*12 - t[i - 1];
tans = 0;
make_heap(now, now + i, less
for(j = 1; j <= r; j ++)
{
if(now[0].f > 0)
tans += now[0].f;
now[0].f -= d[now[0].index];
now[0].f = max(now[0].f, 0);
temp[now[0].index] += 5;
pop_heap(now, now + i, less
push_heap(now, now + i, less
}
if(tans > ans)
{
ans = tans;
memcpy(stay, temp, sizeof(stay));
}
}
for(i = 0; i < n - 1; i ++)
cout << stay[i] <<", ";
cout << stay[n - 1] << endl;
cout <<"Number of fish expected: "<< ans <
return 0;
}
贪心算法,PASCAL高手进
用贪心算法解决背包问题
一个背包问题(贪心算法)
请问克鲁斯卡尔算法是不是贪心算法?
有没有人知道关于贪心算法的论文啊?
如何用0-1背包问题说明贪心算法与动态规划算法的主要区别?
贪心法(Greedy algorithm)如何用软件实现?具体算法是什么?
fishing是什么意思?
求几个讲算法的好点的网站,比如讲 动态规划,贪心,分治等等,谢谢了!
贪心反意词
什么是fishing weight
我很贪心
关于贪心的事例
一个贪心的人。
贪心的反义词
女生不该太贪心
贪心的反义词
nerver gone
never gone
[原创]NO FISHING!打一三国人物!
NO FISHING!打一三国人物!
Fishing Kit 的中文解释是什么?
求BASS MASTER FISHING的攻略
一本英文书“adventure fishing"