关灯问题 dp
题意是一排路灯,每个路灯有耗电量,照明度,需要给这n个路灯按顺序分组,每组内的最大耗电量是电灯数乘t,可以选择关闭一些电灯,求最大的照明度;
这题思路很明显,预处理出一个g[i][j]表示i到j分为一组的最大照明度,f[i][j]表示前i个分为j组的最大照明度,f[i][j]=max(f[k-1][j-1]+f[k][i]);
朴素的预处理是这么搞的
int h[maxm*maxn];
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++){
memset(h,,sizeof(h));
int s=(j-i+)*t;
for(int k=i;k<=j;k++)
for(int c=s;c>=;c--){
if(c<w[k])break;
h[c]=max(h[c],h[c-w[k]]+v[k]);
}
g[i][j]=g[j][i]=h[s];
}
n^4,无法接受,观察了一下,发现h数组每次都这么清一遍太浪费了,要想想怎么从前面的h中获取信息,发现每次h中有i-j的最优信息,然后处理i-j+1的时候相当于又处理了一遍i-j,要找i-j+1的g值,可以考虑一下不清空h数组,直接从j+1向上搞,但是每次最大耗电量都不一样,直接可以设成i-n的最大耗电,然后每次处理完后,在1-当前最大耗电里找最大值就行了,省了一维,可以通过了;
修改代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cstdlib>
using namespace std;
const int maxn=,maxm=;
int n,m,t,w[maxn],v[maxn];
int g[maxn][maxn],f[maxn][maxm];
void init(){
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=n;i++)scanf("%d%d",&w[i],&v[i]);
int h[maxn*maxn];
for(int i=;i<=n;i++){
memset(h,,sizeof(h));
int s=(n-i+)*t;
for(int j=i;j<=n;j++){
int S=(j-i+)*t;
for(int c=s;c>=;c--){
if(c<w[j])break;
h[c]=max(h[c],h[c-w[j]]+v[j]);
}
g[i][j]=g[j][i]=h[S];
}
}
}
void work(){
for(int i=;i<=n;i++)
for(int k=;k<=m&&k<=i;k++){
for(int j=k;j<=i;j++){
f[i][k]=max(f[i][k],f[j-][k-]+g[j][i]);
}
}
cout<<f[n][m]<<endl;
}
int main(){
init();
work();
}
关灯问题 dp的更多相关文章
- 状压DP【p2622】 关灯问题II
题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...
- 关灯问题II 状压DP
关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...
- [状压DP]关灯问题II
关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...
- 洛谷 P2622 关灯问题II【状压DP;隐式图搜索】
题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...
- [Luogu2622]关灯问题$||$(状压$DP$)
#\(\color{red}{\mathcal{Description}}\) \(Link\) 现有\(n\)盏灯,以及\(m\)个按钮.每个按钮可以同时控制这\(n\)盏灯--按下了第i个按钮,对 ...
- 洛谷 P2622 关灯问题II【状压DP】
传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...
- 洛谷 P2622 关灯问题II(状压DP入门题)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 相关变量解释: int n,m; ];//a[i][j] : 第i个开关对第j个 ...
- 洛谷P1220关路灯[区间DP]
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- 区间型DP
区间型DP是一类经典的动态规划问题,主要特征是可以先将大区间拆分成小区间求解最后由小区间的解得到大区间的解. 有三道例题 一.石子合并 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆. ...
随机推荐
- GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
本文主要介绍OGG中一些过滤或计算函数的用法,以及sqlexec的基本用法 SQLPREDICATE 在使用OGG初始化时,可以添加此参数到extract中,用于选择符合条件的记录,下面是OGG官方文 ...
- 重回程序员之路。重写博客。我的ecshop小京东二开问题汇总与解决方案。
问题1:混合支付(余额支付+在线支付)不跟更新订单状态问题. 解决方案:http://bbs.ecshop.com/viewthread.php?tid=156761&highlight= i ...
- 更强的微光闪烁效果--第三方开源--Shimmer-android
Shimmer-android在github上的项目主页是:https://github.com/RomainPiel/Shimmer-android Shimmer-android干脆在Androi ...
- Hao123这个流氓
Author:KillerLegend Date:2014.2.27 From:http://www.cnblogs.com/killerlegend/p/3572591.html Hao123真让人 ...
- 使用WMIC永久设置你的环境变量
关于wmic,引用一下这位哥们儿的话http://technet.microsoft.com/en-us/library/bb742610.aspx: WMIC扩展WMI(Windows Manage ...
- delphi 基础之一 数据类型和基本语法
1. 数据类型 特定类型 日期和时间 Delphi 也用实型数表示日期和时间数据.但为了更准确起见,Delphi 特别定义了TDateTime 数据类型,这是一个浮点类型,因为这个类型必须足够宽,使变 ...
- [.ashx檔?泛型处理例程?]基础入门#1....能否用中文教会我?别说火星文?
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_01.aspx [.ashx檔?泛型处理例程? ...
- jQuery 插件开发解析
那么首先我们来简单的看一下最正统的 jQuery 插件定义方式: (function ($) { $.fn.插件名 = function (settings) { //默认参数 var default ...
- SegmentFault 2014黑客马拉松 北京 作品demo
1号作品展示——最熟悉的陌生人 app 利用录音(声纹识别)和照片来让好久不见的见面变得不那么尴尬. 2号作品展示——神奇魔镜 app 灵感来自通话<白雪公主>,穿越到今天的“魔镜”功能依 ...
- Excel日期格式提取year
Excel日期格式提取year =TEXT(YEAR(C2),"0000")