F. Fence

这个刷Fence的问题看到好几个了。。。

题意

有一个栅栏,由n块宽为1cm的木板组成,第i块木板高为hi,要给他们刷上油漆,有一桶红色的可以刷a平方厘米的油漆,一桶绿色的可以刷b平方厘米的油漆。每块木板只能刷一种油漆。

现在要求出栅栏的不吸引值最小,定义不吸引值:相邻的木板不同颜色的接触长度。

上图的不吸引人值为2+3+1=6.

如果无法刷完输出-1。

思路

dp[i][j][0]表示前i块木板用了j平方的红色油漆,第i块为红色油漆

dp[i][j][1]表示前i块木板用了j平方的红色油漆,第i块为绿色油漆

首先判断第i块是否可以为红色或者绿色

转移的时候判断第i块木板和第i-1块木板的颜色加上产生的不吸引值即可。

代码

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N=4e4+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f; int n,a,b,arr[N],dp[210][N][2];
int sum[210];
/*
dp[i][j][k]表示前i块总共使用了j平方red最后颜色为k的最小不吸引值
*/
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d%d%d",&n,&a,&b);
for(int i=1; i<=n; i++)
{
scanf("%d",&arr[i]);
sum[i]=sum[i-1]+arr[i];
}
memset(dp,inf,sizeof(dp));
dp[0][0][0]=dp[0][0][1]=0;
for(int i=1; i<=n; i++)
{
for(int j=0; j<=a; j++)
{
/*
最后一块可以使用red
red的总量大于当前木板的面积
red总量-当前木板面积+green总量>=前i-1块木板的面积和
*/
if(j>=arr[i]&&(j-arr[i]+b)>=sum[i-1])
{
dp[i][j][0]=min(dp[i][j][0],dp[i-1][j-arr[i]][0]);//颜色相同,不吸引值为0
dp[i][j][0]=min(dp[i][j][0],dp[i-1][j-arr[i]][1]+min(arr[i-1],arr[i]));//颜色不同,加上接触长度
}
/*
最后一块可以使用green
green总量大于当前木板的面积
green总量-当前木板面积+使用a的量>=前i-1块木板的面积和
*/
if(b>=arr[i]&&(b-arr[i]+j)>=sum[i-1])
{
dp[i][j][1]=min(dp[i][j][1],dp[i-1][j][1]);
dp[i][j][1]=min(dp[i][j][1],dp[i-1][j][0]+min(arr[i-1],arr[i]));
}
}
}
int ans=inf;
for(int i=0; i<=a; i++)
{
ans=min(ans,dp[n][i][0]);
ans=min(ans,dp[n][i][1]);
}
if(ans==inf) printf("-1");
else printf("%d\n",ans);
return 0;
}

博客

最新文章

  1. wpf 悬浮窗口的实现
  2. springmvc添加mock json的支持
  3. Java+jquery实现裁剪图片上传到服务器
  4. ASP.NET常见面试题及答案(130题)
  5. java swing文件内容检索工具
  6. MongoDB windows解压缩版安装
  7. iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
  8. Spring学习笔记—装配Bean
  9. mac android studio 编译时报Class JavaLaunchHelper is implemented in both
  10. Vrapper-Eclipse的vim插件安装方法
  11. jquery实现点击页面其他地方隐藏指定元素
  12. 项目总结SpringMVC+hibernate框架 web.xml 分析(2)
  13. Canvas_2
  14. js实现td排序及分组分类
  15. linux shell数组
  16. PgAgent安装、配置、运行
  17. BZOJ 3771 Triple FFT+容斥原理
  18. 总结我在huawei matebook D 2018版中安装archlinux的过程
  19. 报错Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
  20. Java生成XML文件与XML文件的写入

热门文章

  1. 曹工说Redis源码(7)-- redis server 的周期执行任务,到底要做些啥
  2. 归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
  3. python 基础篇 类基础与继承
  4. python机器学习的常用算法
  5. Qt 正则表达式检查 IP 格式
  6. Ubuntu 设置 log 级别
  7. 如何给 Inno Setup 生成的安装包添加版本信息
  8. Linux 字符串处理函数
  9. Docker安装Alibaba Nacos教程(单机)
  10. 整整 Java 线程池