问题描述
  炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃。
  炫炫家有N只羊,羊圈排成一排,标号1~N。炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居,这样一直传播下去,除非某个邻居已经被“放生”了。每一天,所有知道某羊被“放生”了这个消息的羊都会很不满,如果不给他们巧克力的话,他们就会很造反,炫炫已经知道他要吃掉哪些羊,他可以任意安排吃的顺序,然后使巧克力的用量最小,请求出这个最小值。
输入格式
  本题有多组数据,第一行为数据组数T。
  对于每组数据
  第一行:两个用空格隔开的整数:N和M,表示羊的数量和需要吃掉的数量
  第二行:有M个数,表示要吃那些羊。
输出格式
  T行,为每组数据的答案。
样例输入
2
8 1
3
20 3
3 6 14
样例输出
7
35
 
 
 
废了,本来想用状压DP,数据貌似有点大,用了区间DP,可惜只过30%,不知道有什么特例需要注意
(仅记录)
 import java.util.*;

 public class Main {
static Scanner sc = new Scanner(System.in);
static int[] shuru() {
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[m+1];
a[0] = n;
for(int i = 1; i <= m; ++i)
a[i] = sc.nextInt();
return a; } static void tiana(int a[]) {
int n = a[0];
int m = a.length-1;
int[] eat = new int[m+2];
for(int i = 1; i < a.length; ++i)
eat[i] = a[i]; if(a.length-1 == 1) {
System.out.println(n-1);
}
else {
eat[0] = 0;
eat[m+1] = n+1; int len = m + 2;
int[] num = new int[len];
int[] sum = new int[len];
int[][] dp = new int[len+1][len+1];
for(int i = 1; i < len; ++i) {
num[i] = eat[i] - eat[i-1] - 1;
sum[i] = sum[i-1] + num[i];
// System.out.println(num[i]);
} for(int i = 1; i < len; ++i) {
for(int j = 1; j + i < len; ++j) {
int r = i + j;
dp[j][r] = 10000;
for(int k = j; k <= r; ++k) {
dp[j][r] = Math.min(dp[j][r], dp[j][k] + dp[k+1][r]);
} dp[j][r] += sum[r] - sum[j-1] + i - 1;
}
} System.out.println(dp[1][len-1]);
}
} public static void main(String args[]) { int t = sc.nextInt();
Queue<int[]> queue = new LinkedList<int[]>();
for(int i = 0; i < t; ++i) {
queue.add(shuru());
} while(!queue.isEmpty())
tiana(queue.poll()); }
}

看看就好,如果有大佬有全部过的代码,麻烦给个链接,谢谢。

还是太菜了。
 

ADV-299 宰羊 (java,过了30%)的更多相关文章

  1. Java实现 蓝桥杯 算法提高 宰羊

    试题 算法提高 宰羊 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊( ...

  2. 牛客网刷题(纯java题型 1~30题)

    牛客网刷题(纯java题型 1~30题) 应该是先extend,然后implement class test extends A implements B { public static void m ...

  3. 蓝桥杯 试题 算法提高 宰羊 DP解决

    问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居 ...

  4. 写好Java代码的30条经验总结(转)

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...

  5. 写好Java代码的30条经验总结

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中 ...

  6. Java初学者的30个常见问题

    本文回答了30个Java入门级初学者的常见问题. 我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间?为什么Java库不用随机piv ...

  7. Java——自动生成30道四则运算---18.09.27

    package chuti;import java.io.PrintWriter;import java.util.Scanner;import java.io.FileNotFoundExcepti ...

  8. Java代码优化的30个小技巧

    前言 我之前写过两篇关于优化相关的问题:<聊聊sql优化的15个小技巧>和<聊聊接口性能优化的11个小技巧>,发表之后,在全网受到广大网友的好评.阅读量和点赞率都很高,说明了这 ...

  9. java新手笔记30 集合

    1.set/list package com.yfs.javase; import java.util.ArrayList; import java.util.Collection; import j ...

随机推荐

  1. js中ES6的Set的基本用法

    ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. const s = new Set(); [2,3,5,4,5,2,2].forEach(x => s. ...

  2. 「CF911F」Tree Destruction

    传送门 Luogu 解题思路 显然的贪心策略,因为每次都要尽量使得删点后的收益最大. 我们可以求出树的直径(因为树上的任意一个节点与其距离最远的点一定是直径的端点). 然后我们对于所有不是直径上的点, ...

  3. jupyter更换路径

    初次使用anaconda中自带的jupyter,打开后默认工作路径为C:\Users\Admin(自己的用户名)     需要更换工作路径 更换方式如下: 打开C:\Users\Admin(自己的用户 ...

  4. Spring Boot JWT 快速入门

    本章节讨论 jwt 在 spring boot 中的应用.意在快速入门 jwt. java jdk1.8 maven 3.2+ spring boot 2.0+ JSON Web Token(JWT) ...

  5. Linux 下忘记mysql 密码

    ERROR (): Access denied for user 'root'@'localhost' (using password: YES). 一.停止 mysql 数据库 /etc/init. ...

  6. 【Html 页面布局】

    float:left方式布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...

  7. OPENTSDB: Request failed: Internal Server Error net.opentsdb.core.IllegalDataException

    今天Opentsdb补传历史数据的时候,出现了如下的错误: Request failed: Internal Server Error net.opentsdb.core.IllegalDataExc ...

  8. JavaScript - 运行机制,作用域,作用域链(Scope chain)

    参考 https://www.jianshu.com/p/3b5f0cb59344 https://jingyan.baidu.com/article/4f34706e18745be386b56d46 ...

  9. MVC 拦截器

    https://www.cnblogs.com/blosaa/archive/2011/06/02/2067632.html

  10. VIM学习笔记一

    键位图 转自:链接 永久显示行号: vi ~/.vimrc 加入 :set number 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动 ...