花生采摘c语言编程答案,c语言贪心算法智力大冲浪与花生采摘两题

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

HWL0302

2014.08.13

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:49%    等级:10

已帮助:322人

都是用C++写的,不建议只用纯C语言

#include

#include

#include

using namespace std;

struct Riddle {

int time;

int money;

};

struct gt{

bool operator()(Riddle& opl, Riddle& opr){

return opl.money > opr.money;

}

};

int main()

{

int m, n;

ifstream fin("riddle.in");

fin >> m >> n;

Riddle * riddles = new Riddle[n];

for (int i=0; i

fin >> riddles[i].time;

}

for (int i=0; i

fin >> riddles[i].money;

}

sort(riddles, riddles+n, gt() );

int * ridorder = new int[n];

for (int i=0; i

ridorder[i] = 0;

}

for (int i=0; i

int j;

for (j=riddles[i].time-1; j>=0 && ridorder[j]!=0; --j) {}

if (j >= 0) ridorder[j] = 1;

else m -= riddles[i].money;

}

cout << m << endl;

}

#include

#include

#include

#include

#include

#include

using namespace std;

#define maxn 55

struct Peanut

{

int x, y, num;

}peanut[maxn * maxn];

int n, m, t, pcount;

bool operator < (const Peanut &a, const Peanut &b)

{

return a.num > b.num;

}

void input()

{

pcount = 0;

scanf("%d%d%d", &n, &m, &t);

for (int i = 0; i < n; i++)

for (int j = 0; j < m; j++)

{

int a;

scanf("%d", &a);

if (a)

{

peanut[pcount].x = i + 1;

peanut[pcount].y = j + 1;

peanut[pcount].num = a;

pcount++;

}

}

}

void work()

{

int nowtime = peanut[0].x + 1;

if (nowtime + peanut[0].x > t)

{

printf("0\n");

return;

}

int ans = peanut[0].num;

for (int i = 1; i < pcount; i++)

{

nowtime += abs(peanut[i].x - peanut[i - 1].x) + abs(peanut[i].y - peanut[i - 1].y) + 1;

if (nowtime + peanut[i].x > t)

break;

ans += peanut[i].num;

}

printf("%d\n", ans);

}

int main()

{

//freopen("t.txt", "r", stdin);

int t;

scanf("%d", &t);

while (t--)

{

input();

sort(peanut, peanut + pcount);

work();

}

return 0;

}追问: c语言会吗 没有c语言告诉我思路也行 我不会c++ 不懂这是什么意思

追答:你除了头文件和输入输出看不懂应该都会的,如果你连结构体也看不懂就多学学吧

C++可以调用现成的库函数和模板,相对C来说只有优点

追问: 我就是在学啊 学的就是c 正在学 你写的c++好多看不懂 要是没有c语言的告诉我思路也行

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值