题目

这个题一眼看上去是一个贪心,但是一个贪心题就一定要用一个贪心的做法来做吗,为什么不能写一个DP呢,这个题我们可以从他修理牛棚的角度来看,价值就是一个木板可以修几个,但是也同时消耗掉了一个木板的长度也就是代价,想到这里,我们肯定就能想到是一个背包了,但是是一个什么背包呢,我们想一下,完全背包要满足的条件是什么是一个东西可以取无数次,且每一次的价值都会加上,但这个题不一样,这个题你无论修一个牛棚多少次,价值一定不变。

所以是01背包。我们可设一个数组dpij。表示在修到第i个牛棚时用j个木板可以修好的最优解。

因此我们可以得到一个状态转移方程

for(int i=;i<=c;i++)
for(int j=;j<=m;j++)
dp[i][j]=min(dp[i-][j]+data[i]-data[i-],dp[i-][j-]+);

min函数里第一个参数是不采用新的木板的值,第二个则是用一个木板的值。

因此代码:

#include<bits/stdc++.h>
using namespace std;
int m,s,c,data[],dp[][];
int main()
{
scanf("%d%d%d",&m,&s,&c);
for(int i=;i<=c;i++)
scanf("%d",&data[i]);
sort(data+,data++c);
for(int i=;i<=c;i++)
{
for(int j=;j<=m;j++)
dp[i][j]=min(dp[i-][j]+data[i]-data[i-],dp[i-][j-]+);//因为是从[i-1]递推过来所以可以用滚动数组。
dp[i][]=0x7ffffff;//因为dp[0][0]是不可以被赋值的,所以要从i=2开始设为无穷大
}
printf("%d",dp[c][m]);
}

你以为这就完了吗,nonono.

我们知道背包问题的空间是可以简化的。即通过滚动数组,我们看这个题,DP数组的第一个下标都是i-1,在一个表格里说的话就都在它的上一行。

因此可以优化空间,我们再根据01背包的特点可以知道它是从后向前推得因为只有这样才能满足一个东西只能拿一次。

反之如果是完全背包,那我们必须正推,因为,正推就可以根据该行前面已确定的值来确定现在的值。

洛谷P1209修理牛棚题解的更多相关文章

  1. 洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚

    时间限制: 1 s   空间限制: 128000 KB   题目等级 : 黄金 Gold 题目描述 Description 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹 ...

  2. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  3. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  4. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  5. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  6. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  7. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  8. 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair

    P1209 [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. ...

  9. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

随机推荐

  1. layui轮播中箭头不起作用问题

    layui轮播中箭头不起作用问题 layui轮播插件在使用中发现箭头不起作用其他都合适,是什么原因造成的呢?发现单独提出layui中的demo是合适的,通过仔细慢慢的寻找,发现layui.use('c ...

  2. mysql 库 行 列的 操作使用

    -----------------------------------------------------------------------------时间不等你,下一刻,全是新的.每一刻都让它变得 ...

  3. 配置linux-Fedora系统下iptables防火墙

    参考地址:https://blog.csdn.net/zhangjingyi111/article/details/78902820 本篇文章为实验课过程记录,较为简略. 1.查看系统是否安装ipta ...

  4. HTTP请求中的Keep-Alive模式,是怎么区分多个请求的?

    Keep-Alive模式 我们都知道HTTP是基于TCP的,每一个HTTP请求都需要进行三步握手.如果一个页面对某一个域名有多个请求,就会进行频繁的建立连接和断开连接.所以HTTP 1.0中出现了Co ...

  5. Java开学测试源代码

    package sample; import java.io.IOException;import java.io.Serializable;import java.util.Scanner;impo ...

  6. poj2226 Muddy Fields 填充棒子(二分匹配)

    参考博客:https://blog.csdn.net/liujc_/article/details/51287019 参考博客:https://blog.csdn.net/acdreamers/art ...

  7. NFV组播实验对照

    一 论文题目:Approximation and Online Algorithms for NFV-Enabled Multicasting in SDNs 发表时间:2017 期刊来源:Inter ...

  8. ARC 066D Xor Sum AtCoder - 2272 (打表找规律)

    Problem Statement You are given a positive integer N. Find the number of the pairs of integers u and ...

  9. Django 中的Form、ModelForm

    一.ModelForm 源码 class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): pass def modelform_fact ...

  10. 原生node路由操作以及注意事项

    var http = require("http"); var url = require("url"); var ejs = require("ej ...