【每日一题】蓝桥杯历年真题题解 -装饰珠

梁老师
梁老师 北京小升初老师~

0 人点赞了该文章 · 74 浏览




题目描述

图片


解题思路

图片


参考代码

1、Java B组

import java.io.*;import java.util.*;class InputReader{    private final static int BUF_SZ = 65536;    BufferedReader in;    StringTokenizer tokenizer;    public InputReader(InputStream in) {        super();        this.in = new BufferedReader(new InputStreamReader(in),BUF_SZ);        tokenizer = new StringTokenizer("");    }    private String next() {        while (!tokenizer.hasMoreTokens()) {            try {                tokenizer = new StringTokenizer(in.readLine());            } catch (IOException e) {                throw new RuntimeException(e);            }        }        return tokenizer.nextToken();    }    public int nextInt() {        return Integer.parseInt(next());    }}
public class Main { private static int m; private static int x; private static int ans; private static int[] sum = new int[5]; private static int[] dp = new int[310]; private static Vector<Vector<Integer>> vec1 = new Vector<Vector<Integer>>(); private static Vector<Vector<Integer>> vec2 = new Vector<Vector<Integer>>(); private static Vector<Vector<Integer>> vec3 = new Vector<Vector<Integer>>(); private static Vector<Vector<Integer>> vec4 = new Vector<Vector<Integer>>(); private static Vector<Vector<Integer>> vec = null; private static int calc() { int V = 0; for (int l = 4; l >= 1; l--) { V += sum[l]; vec = null; if(l == 1) vec = vec1; else if(l == 2) vec = vec2; else if(l == 3) vec = vec3; else if(l == 4) vec = vec4; for (Vector<Integer> i : vec) { for (int k = V; k >= 0; k--) { for (int j = 0; j < i.size(); j++) { int w = j + 1; int v = i.get(j); if (k - w >= 0) { dp[k] = Math.max(dp[k], dp[k - w] + v); } else break; } } } } for (int i = 0; i <= V; i++) { ans = Math.max(ans, dp[i]); } return ans; }
public static void main(String[] args) { InputReader cin = new InputReader(System.in); for (int i = 1; i <= 6; i++) { int n = cin.nextInt(); for (int j = 1; j <= n; j++) { x = cin.nextInt(); sum[x]++; } } m = cin.nextInt(); for (int i = 1; i <= m; i++) { int l = cin.nextInt(), p = cin.nextInt(); Vector<Integer> b = new Vector<Integer>(); for (int j = 1; j <= p; j++) { x = cin.nextInt(); b.add(x); } if(l == 1) vec1.add(b); else if(l == 2) vec2.add(b); else if(l == 3) vec3.add(b); else if(l == 4) vec4.add(b); } System.out.println(calc()); }}

2、Python

import osimport sys
vec1 = []vec2 = []vec3 = []vec4 = []vec = []dp = [0] * 301sum = [0] * 6
for i in range(1, 7): mp = list(map(int, input().split())) for i in range(1, len(mp)): sum[mp[i]] += 1m = int(input())for i in range(1, m + 1): mp = list(map(int, input().split())) b = [] for j in range(2, len(mp)): x = mp[j] b.append(x) if mp[0] == 1: vec1.append(b) if mp[0] == 2: vec2.append(b) if mp[0] == 3: vec3.append(b) if mp[0] == 4: vec4.append(b)V = 0cnt = 0for l in range(4, 0, -1): V += sum[l] if l == 1: vec = vec1 elif l == 2: vec = vec2 elif l == 3: vec = vec3 elif l == 4: vec = vec4 for i in vec: k = int(V) while k >= 0: for j in range(0, len(i)): if k - j - 1 >= 0: if dp[k - j - 1] + i[j] > dp[k]: dp[k] = dp[k - j - 1] + i[j] else: break k -= 1ans = 0for h in range(0, V + 1): ans = max(ans, dp[h])
print(ans)
图片


添加 家长论坛微信 



发布于 2024-04-21 19:47

免责声明:

本文由 梁老师 原创发布于 家长帮 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

All Rights Reserved Powered BY WeCenter V4.1.0 © 2026 京ICP备20005761号-2