本文主要是介绍蓝桥杯刷题第六天(去年蓝桥杯买二赠一全网都错了?),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天主要刷了两道很有意思的题目,使我完全想放弃蓝桥杯了,其中一道全网答案都是错的
这道题感觉用贪心做不了吧
很多特例比如:
6
12 23 25 25 50 50
全网模板算得都是160,我试了很多种办法好像似乎也就暴力遍历可以解决。
学弟的一种状态dp(算是软暴力):
https://paste.ubuntu.com/p/24ngSP8RJN/.
我的是只能对特定情况下的数据可以成立。
package lanqiao2023_7;
import java.util.*;public class Main {public static void main(String []args) {int N;Scanner a = new Scanner(System.in);N = a.nextInt();long b[]=new long [N];//存放商品的价值long c[]=new long [N];//记录商品是否需要花钱for (int i=0;i<N;i++) {b[i]=a.nextInt();}long sum=0;//对b排序Arrays.sort(b);//执行一次int p=N-2;//设置状态都要花钱for(int i =0;i<N;i++) {c[i]=1;}for(int i=((N-1)/3);i>=0;i--) {if(b[p]/2>=b[i]) {//设置为不花钱赠送c[i]=0;p=p-2;}}for(int i = 0;i<N;i++) {sum = sum+b[i]*c[i];}System.out.println(sum); }
}
我的算法思路是先排序一直后两个数和前三分之一开始的数看能不能匹配不能就往前移,但也有弊端的如果数据间隔很大就不行比如三分之二处一个数就是三分之一处的10倍后面有可以匹配消掉但没消掉因为遍历不到这个数,所以我觉得这道题可能和数学建模找最低点一样只能类似于启动式算法一个局部最优(在数据量大的情况下,比如三维坐标下找最低点不可能都遍历一遍)蓝桥杯系统是贪心算法可以通过。
这题就pass了考试也最好用贪心。不要想太多反例恶心自己了或者直接纯暴力吧
这篇关于蓝桥杯刷题第六天(去年蓝桥杯买二赠一全网都错了?)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!