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

解题思路:解这道题的关键是,当放生(或吃掉)一个位置的羊后,此位置的左端和右端就相互独立了,即原问题变成了两个规模更小独立的子问题。要求原问题的最优解,则其子问题也必须是最优。(可以
用"剪切-粘贴"("cut-and-paste")技术证明,即如果子问题的解如果不是最优,则可以选择其最优解代替非最优解(剪切非最优解,粘贴最优解) )。所以此题可以用DP解决。
释放K位置羊所需的巧克力数:
  •此时所需的巧克力数
  •释放位置左侧所需巧克力数  
  •释放位置右侧所需巧克力数
设数组A[]保存要被放生羊的位置,dp[ i ][ j ]:将A[ i ] 到 A[ j ] 连续部分的羊都放生后所需最小巧克力数。dp[ i ] [ j ]  = min( dp[ i ][ j ] , dp[ i ][ k ] + dp[ k ][ j ] ), dp[ i ][ j ] +=  A[ j ] - A[ i ] - 2
 
//完整代码
 #include<cstdio>
#include<climits>//INT_MAX
#include<algorithm>
using namespace std; const int Max_M = ; //输入
int T,N,M;
int A[Max_M+]; //A下标: 0 - M+1 保存要吃掉羊的位置 int dp[Max_M+][Max_M+];//i:0-M j:0-M+1 dp数组 void solve()
{
A[] = ; //因为dp[i][j]不包含两端,所以为统一求解
A[M+] = N+;//最后答案即 dp[0][N+1] 所以额外加上这两个位置 //初始化dp数组
for(int m=; m<=M; m++){
dp[m][m+] = ;
} //从短区间开始填充dp数组 w:区间长度
for(int w=; w<=M+; w++)
{
for(int i=; i+w<=M+; i++ )// j <= M+1
{
int j = i + w;
int t = INT_MAX;
for(int k=i+; k<j; k++){
t = min( t, dp[i][k]+dp[k][j]);
}
dp[i][j] = t + A[j] - A[i] - ;
}
}
printf("%d\n",dp[][M+]);
} int main()
{
scanf("%d",&T);
while( T-- )
{
scanf("%d%d",&N,&M);
for(int i=; i<=M; i++){
scanf("%d",&A[i]);
} solve();
} return ;
}

蓝桥杯 试题 算法提高 宰羊 DP解决的更多相关文章

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

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

  2. Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪

    试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...

  3. 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...

  4. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...

  5. 算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最 ...

  6. Java实现 蓝桥杯VIP 算法提高 最长公共子序列

    算法提高 最长公共子序列 时间限制:1.0s 内存限制:256.0MB 问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格 ...

  7. Java实现 蓝桥杯VIP 算法提高 最长字符序列

    算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)--x(m)},Y={y(1)y( ...

  8. Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴

    算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕 ...

  9. Java实现 蓝桥杯VIP 算法提高 士兵排队问题

    算法提高 士兵排队问题 时间限制:1.0s 内存限制:256.0MB 试题 有N个士兵(1≤N≤26),编号依次为A,B,C,-,队列训练时,指挥官要把一些士兵从高到矮一次排成一行,但现在指挥官不能直 ...

随机推荐

  1. 16.What is pass in Python?

    What is pass in Python? Pass means, no-operation Python statement, or in other words it is a place h ...

  2. 在线图片资源转换成Base64格式

    function getBase64Image(img) { var canvas = document.createElement("canvas"); canvas.width ...

  3. log4j 详细解释

    2019独角兽企业重金招聘Python工程师标准>>> 虽然说log4j自己会用,但是还是觉得对配置文件还不是很熟悉,最近看了一个博客,感觉很不多,我提炼出自己的理解. 地址 案例我 ...

  4. C语言编程入门题目--No.11

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3, ...

  5. Codeforces 1323 div2题解ABC

    A. Even Subset Sum Problem 签到题 #include <bits/stdc++.h> using namespace std; template <type ...

  6. zwx_helper

    通过重载c++operator,实现一种轻松的wxWidgets界面编程风格,如html编写页面一样直观容易. 举一例,一个界面页有四块区,如果是开发html的话,是从头到脚一气书写 <div ...

  7. P2620 虫洞

    题目背景 applepi 想进行宇宙旅行.当然,applepi 知道这是有可能的,因为applepi 的特殊能力能使他观测到宇宙中的虫洞.所谓虫洞就是一个在三维之外的维度打开的快捷通道,通过虫洞能够从 ...

  8. unittest(执行用例)

    from selenium import webdriver from time import sleep import unittest#导入unittest库 import HTMLTestRun ...

  9. Java——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  10. 从excel表格加载数据返回DataSet

    添加命名空间:using System.Data.OleDb; /// <summary> /// 从excel表格加载数据返回DataSet /// </summary> / ...