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 ...
随机推荐
- Flex 国际化(中英语言适配)
原文地址:http://www.cnblogs.com/meteoric_cry/archive/2011/01/13/1934404.html(由于此贴时间久远,已做微调) 1.新建Flex Pro ...
- Javascript 数字保留2位小数
整理使用Javascript函数将数值保留两位小数: 1.num.toFixed(2) //进位 2.(Math.round(num * 100) / 100).toFixed(2) //进位 3.( ...
- Mysql存储过程和函数
Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...
- Fox And Jumping
Fox And Jumping 题目链接:http://codeforces.com/problemset/problem/512/B dp 若所选卡片能到达区间内任意点,那么所选卡片的最大公约数为1 ...
- 3、File类之创建、删除、重命名、判断方法
一般我们调用内置类的方法,都是指调用其成员方法,故而以下几种方法都是File类的成员方法,常用的有以下3种, 分别是 //创建 public boolean createNewFile() publi ...
- Java IO 过滤流 BufferedInput/OutputStream
Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...
- QQ头像一键添加校徽
简书链接地址:http://www.jianshu.com/p/dcb2cbd07e4d 项目展示链接地址:www.zhaozhengyu.cn/SchoolImage/index.html
- osg蝴蝶纹理
#include <osgViewer/Viewer> #include <osgDB/WriteFile> #include <osg/StateSet> #in ...
- HDU 1253 胜利大逃亡(BFS)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A ...
- hdu2063 匈牙利算法 二分最大匹配模版题
过山车 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java class na ...