HDU 4381 Grid
背包变形。
将操作分为了两类,可以分开处理。
可以dp处理出L[i]:L[i]=-1代表从左到右 i 长度不能被拼凑出来,L[i]!=-1表示从左到右 i 长度能被拼凑出,并且最小费用为L[i]。
反着来一次dp就可以处理出R[i]:R[i]=-1代表从右到左 n+1-i 长度不能被拼凑出来,R[i]!=-1表示从右到左 n+1-i 长度能被拼凑出,并且最小费用为R[i]。
由L[1---i] 与R[i+1---n]可以得出,以i为分割的最优解,于是,枚举 i 即可。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
inline int read()
{
char c = getchar(); while(!isdigit(c)) c = getchar();
int x = ;
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} const int maxn=+;
int T,n,m;
struct X { int op,a,x; }s[maxn];
bool cmp1(X a,const X b) { return a.a<b.a; }
bool cmp2(X a,const X b) { return a.a>b.a; }
int L[maxn],R[maxn]; int main()
{
scanf("%d",&T); int cas=; while(T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++) scanf("%d%d%d",&s[i].op,&s[i].a,&s[i].x);
sort(s+,s++m,cmp1); memset(L,-,sizeof L); L[]=;
for(int i=;i<=m;i++)
{
if(s[i].op!=) continue;
for(int j=n;j>=;j--)
{
if(L[j]==-) continue; if(j+s[i].x>s[i].a) continue;
if(L[j+s[i].x]==-) L[j+s[i].x]=L[j]+;
else L[j+s[i].x]=min(L[j+s[i].x],L[j]+);
}
} memset(R,-,sizeof R); R[n+]=;
sort(s+,s++m,cmp2);
for(int i=;i<=m;i++)
{
if(s[i].op!=) continue;
for(int j=;j<=n+;j++)
{
if(R[j]==-) continue; if(j-s[i].x<s[i].a) continue;
if(R[j-s[i].x]==-) R[j-s[i].x]=R[j]+;
else R[j-s[i].x]=min(R[j-s[i].x],R[j]+);
}
}
int ans1=,ans2=;
for(int i=;i<=n;i++)
{
int a1=,a2=,b1=,b2=;
for(int j=i;j>=;j--) { if(L[j]==-) continue; a1=j,a2=L[j]; break; }
for(int j=i+;j<=n+;j++) { if(R[j]==-) continue; b1=n+-j,b2=R[j]; break; }
if(a1+b1>ans1) ans1=a1+b1, ans2=a2+b2;
else if(a1+b1==ans1) ans2=min(ans2,a2+b2);
}
printf("Case %d: %d %d\n",cas++,ans1,ans2);
}
return ;
}
HDU 4381 Grid的更多相关文章
- hdu 4381(背包变形)
题意: 给定n个块,编号从1到n,以及m个操作,初始时n个块是白色. 操作有2种形式: 1 ai xi : 从[1,ai]选xi个块,将这些块涂白. 2 ai xi:从[ai,n]选xi个块,将这些块 ...
- hdu 4255 A Famous Grid
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...
- HDU - 1705 Count the grid
昨天吉老师讲了皮克定理 皮克定理用于计算点阵中顶点在格点上的多边形面积.对于一个顶点全部在格点上的多边形来说,它的面积计算有如下特点: 如果用a表示位于多边形内部的格点数,b表示位于多边形边界上的格点 ...
- HDU 1892 See you~ (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...
- Match:Milking Grid(二维KMP算法)(POJ 2185)
奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上 ...
- HDU 1505 City Game (hdu1506 dp二维加强版)
F - City Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 1078 FatMouse and Cheese(记忆化搜索)
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4069 Problem Description Today we play a squiggly sud ...
随机推荐
- 手动安装VS code 插件
现在安装包: 通过修改下面的地址参数:https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publish ...
- ef code first 您没有所需权限
在进行数据库更新操作时,update-database -force,反复提示没有改表或者没有所需权限,昨晚折腾了4个小时没有搞定,太晚了,今天Google了一下,这方面的错误,提到的都很少,在一篇文 ...
- GitHub上优秀的ThirdParty
仅为个人记录. 1.SwiftyJSON GitHub地址:https://github.com/SwiftyJSON/SwiftyJSON 2.CryptoSwift GitHub地址:https: ...
- windows和Ubuntu双系统的安装和基本操作
因为最近刚开始学习ubuntu系统,首先要安装系统,搜集了网上的资料觉得这篇博客特别有用 http://www.cnblogs.com/Duane/p/5424218.html,我也是按照里面的步骤 ...
- Javaweb 第5天 mysql 数据库课程
MySQL数据库课程 两日大纲 ● 数据库的概念.MySQL快速入门.SQL语言简介 ● 数据库操作.表操作.数据记录操作.数据类型和约束 ● 查询 ● 多表关系.多表连接查询 ● 视图 ● 数据备份 ...
- CodeForces 703A Mishka and Game
简单题. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inclu ...
- js--面向对象继承
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有. // 原型对象: var Student = { name: 'Robot', hei ...
- js--javascript中字符串常用操作总结、JS字符串操作大全
字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...
- JavaScript面向对象基础语法总结
1.Javascript的 对象(Object): //例子:var car = { , , }; 2.使用构造函数来创建对象. //例子: var Car = function() { ; ; ; ...
- dubbo 的monitor监视器安装问题——————monitor一直处于正在启动状态
一台服务器安装完zookeeper并启动后,然后在另一服务器安装monitor dubbo-monitor-simple-2.8.3 解压安装 修改配置文件 dubbo.container= ...