问题描述
炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃。
炫炫家有N只羊,羊圈排成一排,标号1~N。炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居,这样一直传播下去,除非某个邻居已经被“放生”了。每一天,所有知道某羊被“放生”了这个消息的羊都会很不满,如果不给他们巧克力的话,他们就会很造反,炫炫已经知道他要吃掉哪些羊,他可以任意安排吃的顺序,然后使巧克力的用量最小,请求出这个最小值。
炫炫家有N只羊,羊圈排成一排,标号1~N。炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居,这样一直传播下去,除非某个邻居已经被“放生”了。每一天,所有知道某羊被“放生”了这个消息的羊都会很不满,如果不给他们巧克力的话,他们就会很造反,炫炫已经知道他要吃掉哪些羊,他可以任意安排吃的顺序,然后使巧克力的用量最小,请求出这个最小值。
输入格式
本题有多组数据,第一行为数据组数T。
对于每组数据
第一行:两个用空格隔开的整数:N和M,表示羊的数量和需要吃掉的数量
第二行:有M个数,表示要吃那些羊。
对于每组数据
第一行:两个用空格隔开的整数:N和M,表示羊的数量和需要吃掉的数量
第二行:有M个数,表示要吃那些羊。
输出格式
T行,为每组数据的答案。
样例输入
2
8 1
3
20 3
3 6 14
8 1
3
20 3
3 6 14
样例输出
7
35
35
废了,本来想用状压DP,数据貌似有点大,用了区间DP,可惜只过30%,不知道有什么特例需要注意
(仅记录)
1 import java.util.*; 2 3 public class Main { 4 static Scanner sc = new Scanner(System.in); 5 static int[] shuru() { 6 int n = sc.nextInt(); 7 int m = sc.nextInt(); 8 int[] a = new int[m+1]; 9 a[0] = n; 10 for(int i = 1; i <= m; ++i) 11 a[i] = sc.nextInt(); 12 return a; 13 14 } 15 16 static void tiana(int a[]) { 17 int n = a[0]; 18 int m = a.length-1; 19 int[] eat = new int[m+2]; 20 for(int i = 1; i < a.length; ++i) 21 eat[i] = a[i]; 22 23 if(a.length-1 == 1) { 24 System.out.println(n-1); 25 } 26 else { 27 eat[0] = 0; 28 eat[m+1] = n+1; 29 30 int len = m + 2; 31 int[] num = new int[len]; 32 int[] sum = new int[len]; 33 int[][] dp = new int[len+1][len+1]; 34 for(int i = 1; i < len; ++i) { 35 num[i] = eat[i] - eat[i-1] - 1; 36 sum[i] = sum[i-1] + num[i]; 37 // System.out.println(num[i]); 38 } 39 40 41 for(int i = 1; i < len; ++i) { 42 for(int j = 1; j + i < len; ++j) { 43 int r = i + j; 44 dp[j][r] = 10000; 45 for(int k = j; k <= r; ++k) { 46 dp[j][r] = Math.min(dp[j][r], dp[j][k] + dp[k+1][r]); 47 } 48 49 dp[j][r] += sum[r] - sum[j-1] + i - 1; 50 } 51 } 52 53 System.out.println(dp[1][len-1]); 54 } 55 } 56 57 public static void main(String args[]) { 58 59 int t = sc.nextInt(); 60 Queue<int[]> queue = new LinkedList<int[]>(); 61 for(int i = 0; i < t; ++i) { 62 queue.add(shuru()); 63 } 64 65 while(!queue.isEmpty()) 66 tiana(queue.poll()); 67 68 } 69 }
看看就好,如果有大佬有全部过的代码,麻烦给个链接,谢谢。
还是太菜了。