JZOJ 1312:关灯问题
少见的DP再DP题目。题面不短,但是可以看出来这是一道DP题。而且正解的算法复杂度应该是$O(N^3)$。而且给了部分$O(N^4)$的算法的分。可以看出来要AC是要在DP上加上优化的。
设$g[i][j]$表示$[i,j]$内满足条件的最大答案贡献,这个用背包可以很轻松的处理出来。然后再设$f[i][k]$表示前$i$个分$k$组的最大答案。可以得到如下状态转移
$f[i][k]=max\{ f[j-1][k-1]+g[j][i] \}$
把背包上的枚举优化掉一维就行了。
代码实现上也存在诸多细节。
//OJ 1312
//by Cydiater
//2016.10.6
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <ctime>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
#define pii pair<int,int>
#define fi first
#define se second
const int MAXN=1e3+5;
const int oo=0x3f3f3f3f;
inline int read(){
char ch=getchar();int x=0,f=1;
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int N,M,T,g[MAXN][MAXN],pack[MAXN*MAXN],f[MAXN][MAXN];
pii light[MAXN*MAXN];
namespace solution{
void init(){
N=read();M=read();T=read();
up(i,1,N){
int x=read(),y=read();
light[i]=make_pair(x,y);
}
}
void pret(){
memset(g,0,sizeof(g));
up(i,1,N){
memset(pack,0,sizeof(pack));
up(j,i,N){
down(k,(N-i+1)*T,light[j].fi)pack[k]=max(max(pack[k],pack[k-1]),pack[k-light[j].fi]+light[j].se);
g[i][j]=g[j][i]=pack[(j-i+1)*T];
}
}
}
void DP(){
memset(f,0,sizeof(f));
up(i,1,N)up(k,1,min(M,i))up(j,k,i)f[i][k]=max(f[i][k],f[j-1][k-1]+g[j][i]);
cout<<f[N][M]<<endl;
}
}
int main(){
//freopen("input.in","r",stdin);
using namespace solution;
init();
pret();
DP();
return 0;
}
JZOJ 1312:关灯问题的更多相关文章
- 用JS做关灯游戏(初级)
这是一个很有意思的游戏,可以试着玩下. <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- Jquery开灯关灯效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HDU 1312 Red and Black (dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...
- [BZOJ1659][Usaco2006 Mar]Lights Out 关灯
[BZOJ1659][Usaco2006 Mar]Lights Out 关灯 试题描述 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的 ...
- HDU 1312 (BFS搜索模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...
- HDU 1312 Red and Black --- 入门搜索 BFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- HDU 1312 Red and Black --- 入门搜索 DFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- csu 1312 榜单(模拟题)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1312 1312: 榜单 Time Limit: 1 Sec Memory Limit: 128 ...
- 小游戏 Lights Out (关灯) 的求解 —— 异或方程组
Author : Evensgn Blog Link : http://www.cnblogs.com/JoeFan/ Article Link : http://www.cnblogs.com/J ...
随机推荐
- cocos2dx-2.2.1 免 Cygwin 环境搭建(Win8+VS2013+ADT Bundle+android-ndk-r9c)
1.下载 ADT Bundle 解压到D盘 D:\adt-bundle-windows-x86_64-20131030: 2.下载 NDK-R9C,解压到 ADT 目录下:D:\adt-bundle- ...
- overlay-1
.overlay-shadowbox{ visibility:hidden; position:absolute; display:block; margin:0; padding:0; top:0; ...
- android-之测试框架的使用AndroidTestCase
Android Manifest.xml中所需要添加的配置 <instrumentation android:name="android.test.InstrumentationTes ...
- confluence的安装、备份和恢复(wiki)
还有一种比较不错的wiki工具MediaWiki 安装教程参考 http://pangge.blog.51cto.com/6013757/1560249 我是按照上面的教程搭建的 还有几篇不错的文章 ...
- [转]看懂ExtJS的API
原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...
- puppet的配置
1时间问题 agent与master端务必要保持时间的一致性,最好使用ntp服务 检查ntp服务是否安装 [root@master-elk ~]# rpm -qa|grep ntp ntpdate-. ...
- 为什么OGNL表达式功能强大?
1.OGNL能支持java运算符: 2.OGNL能从java对象中取值: 3.OGNL能调用java对象的方法:
- java代码运行linux shell操作
1.Java调用shell Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...
- 【BZOJ-3786】星系探索 Splay + DFS序
3786: 星系探索 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 647 Solved: 212[Submit][Status][Discuss] ...
- 【poj3261】 Milk Patterns
http://poj.org/problem?id=3261 (题目链接) 题意 给出n个数和k,求在给出的数中,最长的出现至少k次的可重叠子串. solution 后缀数组论文题,感觉分组思想可能会 ...