解题思路:
用的是暴力求解,从给出的药草种类n中选1个,选2个,...  ,选n个,满足时间不超限制的,来计算药草价值,更新并在最后输出。

上述方法时间用的较长,如果用优化算法,用最大流思想,仅供参考思想,代码用C语言表达出来,我还不会。。。




注意事项:





参考代码:#include<stdio.h>
int maxnum;
int neednum;
int answer;
int final=0;
int time;
int a[100], b[100], c[100], d[100];
void initial()//本函数的目的,将a[10]中的元素初始化为1,2,3,...10。
{
 int p;
 for (p = 0; p < 100; p++)
  a[p] = p;
}
void put()                             //组合结果的计算函数
{
 int k, sum = 0;
 for (k = 0; k < neednum;k++)
 {
  sum = c[b[k]] + sum;
  if (sum > time)
   return;
 }
 answer = 0;
 for (k = 0; k < neednum;k++)
  answer = answer + d[b[k]];
 if (answer > final)
  final = answer;
}
void setnum(int star, int x)      //组合函数
{
 if (x == neednum)
 {
  put();
  return;
 }
 if ((maxnum - star) < (neednum - x))
  return;
 b[x] = a[star];                        //b[0],b[1],...,b[neednum]中的元素等于a[]中的元素选取
 setnum(star + 1, x + 1);
 setnum(star + 1, x);
}
int main()
{
 int type, i, j;
 initial();
 scanf_s("%d%d", &time, &type);
 maxnum = type;
 for (i = 0; i < type; i++)
  scanf_s("%d%d", &c[i], &d[i]);
 for (i = 1; i <= type; i++)
 {
  neednum = i;
  setnum(0, 0);
 }
 printf("%d\n", final);
 return 0;
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论