背包变形。

将操作分为了两类,可以分开处理。

可以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的更多相关文章

  1. hdu 4381(背包变形)

    题意: 给定n个块,编号从1到n,以及m个操作,初始时n个块是白色. 操作有2种形式: 1 ai xi : 从[1,ai]选xi个块,将这些块涂白. 2 ai xi:从[ai,n]选xi个块,将这些块 ...

  2. hdu 4255 A Famous Grid

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...

  3. HDU - 1705 Count the grid

    昨天吉老师讲了皮克定理 皮克定理用于计算点阵中顶点在格点上的多边形面积.对于一个顶点全部在格点上的多边形来说,它的面积计算有如下特点: 如果用a表示位于多边形内部的格点数,b表示位于多边形边界上的格点 ...

  4. HDU 1892 See you~ (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...

  5. Match:Milking Grid(二维KMP算法)(POJ 2185)

    奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上 ...

  6. HDU 1505 City Game (hdu1506 dp二维加强版)

    F - City Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  7. HDU 2841 Visible Trees 数论+容斥原理

    H - Visible Trees Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. HDU 1078 FatMouse and Cheese(记忆化搜索)

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. 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 ...

随机推荐

  1. 3、XCode: 如何添加自定义代码片段

    我们经常会定义一些retain的property,而且大概每次我们都会像这样写: @property (nonatomic, retain) Type *name; 每次都要老老实实的把“@prope ...

  2. C# XML配置文件读写类(用于程序配置保存)

    调用方式 //初始化并指定文件路径 XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml"); //写入要保存的值以及路径(Syste ...

  3. 【.NET】加密和解密(.NET)

    类名:Security using System; using System.Security.Cryptography; using System.IO; using System.Text; na ...

  4. 今天写动态canvas柱状图小结

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. hdu1008

    //c++// #includeusing namespace std;int main(){int n,j,t,start;while (cin >> n,n){start =0;t = ...

  6. 难以记住的sql语句

    天,把这篇文章转移到这里,增强一下记忆,找起来也更方便. 导出: mysqldump -u username -p password -h hname dbname tblname > file ...

  7. 第六十四节,html文档布局元素

    html文档布局元素 学习要点:     1.文档元素总汇     2.文档元素解析     本章主要探讨HTML5中文档元素,文档元素的主要作用是划分各个不同的内容,让整个布局清晰明快.让整个布局元 ...

  8. POJ 2231 Moo Volume

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description Farmer Jo ...

  9. Node.js:url

    在node运行环境中输入url: > url url { parse: [Function: urlParse], resolve: [Function: urlResolve], resolv ...

  10. Infix to postfix 用stack模板,表达式没有括号

    #include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...