234F fence (DP)
来源:互联网 发布:大家坛珠宝淘宝店 编辑:程序博客网 时间:2024/06/07 05:46
题目传送门
题目大意:给一个条形图涂色,每一列都是由边长为1的正方形组成。每一次将一列涂成红色或者绿色。涂成红色、绿色的正方形个数不超过a、b。当相邻两列颜色不同时,取较小者的高度作为权值。求最小权值。
设dp[i][j][0]表示将第i列涂成红色后,红色数量为j时的最小权值。
dp[i][j][1]表示将第i列涂成绿色后,红色数量为j时的最小权值。
#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint sum[201],dp[201][40001][2];int main(){ int i,j,n,a,b; freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d%d%d",&n,&a,&b); memset(dp,inf,sizeof(dp)); sum[0]=dp[0][0][0]=dp[0][0][1]=0; for(i=1;i<=n;++i) { scanf("%d",&sum[i]); sum[i]+=sum[i-1]; } for(i=0;i<n;++i) for(j=0;j<=a;++j) { if(sum[i+1]-j<=b) dp[i+1][j][1]=min(min(dp[i+1][j][1],dp[i][j][1]),dp[i][j][0]+min(sum[i]-sum[i-1],sum[i+1]-sum[i])); if(j+sum[i+1]-sum[i]<=a) dp[i+1][j+sum[i+1]-sum[i]][0]=min(min(dp[i+1][j+sum[i+1]-sum[i]][0],dp[i][j][0]),dp[i][j][1]+min(sum[i]-sum[i-1],sum[i+1]-sum[i])); } int ans=inf; for(i=0;i<=a;++i) { ans=min(ans,dp[n][i][0]); ans=min(ans,dp[n][i][1]); } if(ans!=inf) printf("%d\n",ans); else puts("-1"); return 0;}
0 0
- 234F fence (DP)
- codeforces 234F Fence (dp)
- Codeforces 234 F. Fence
- codeforces 234F - Fence
- CodeForces Round #145(234F) - Fence
- CodeForces Round #145(234F) - Fence
- cf_234/F Fence
- F - Deer-Proof Fence final
- Codeforces 234F (dp)
- poj1821 Fence,dp
- 【DP POJ 1821】Fence
- codeforces Wooden Fence 简单DP
- codeforces 240B - Fence DP
- poj1821 Fence 单调队列dp
- POJ1037:A decorative fence(DP)
- 【dp】leetcode 276. Paint Fence
- cf 76F DP
- 【Codeforces 500F】Dp
- Project 1 :创建链表与显示链表
- ccv:一个现代的开源计算机视觉函数库
- jQuery的deferred对象详解
- 手机卫士 一键锁屏(获得管理员权限)
- tomcat服务器无法启动
- 234F fence (DP)
- ArcGIS Python arcpy 批量创建SDE空间索引
- 逐帧动画详解一
- 如何把ppt格式转换成pdf格式
- C++之“程序结构”
- 如何打开plsql导出的CSV文件
- web服务器和应用服务器的区别
- POJ 3080 Blue Jeans (KMP || 暴力)
- SAP EP开发环境搭建和操作总结