原题链接:采药
解题思路:
根据回溯法,首先画出解空间,解空间就是按照深度优先遍历的得到最优解的叉树(不一定是二叉树)
注意事项:
回溯超时,别提交;
参考代码:
#include <stdio.h> int T, m, time[101], value[101], pvalue = 0, maxvalue = 0; int tanxin( int i ); void function( int i ); /*-----------------------------------------------------*/ int main() { while ( (scanf( "%d%d", &T, &m ) ) != EOF ) { maxvalue = 0; pvalue = 0; for ( int i = 0; i < m; i++ ) scanf( "%d%d", &time[i], &value[i] ); function( 0 ); printf( "%d\n", maxvalue ); } } /*-----------------------------------------------------*/ void function( int i ) { if ( i >= m ) { if ( maxvalue < pvalue ) { maxvalue = pvalue; } return; } if ( T >= time[i] ) { pvalue += value[i]; T -= time[i]; function( i + 1 ); pvalue -= value[i]; T += time[i]; } if ( tanxin( i + 1 ) > maxvalue ) function( i + 1 ); return; } int tanxin( int i ) { int left = T; int b = pvalue; while ( i <= m && time[i] <= T ) { left -= time[i]; b += value[i]; i++; } if ( i <= m ) b += value[i] * (1.0 * left / time[i]); return(b); }
0.0分
11 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复