BZOJ1930 [Shoi2003]pacman 吃豆豆
dp,首先建出图,f[i][j]表示a吃到了i点,b吃到了j点的最大值,转移的时候转移拓扑序小的那一维,如果i拓扑序小于j,那么转移到f[k][j],否则转移到f[i][k],建出的图边数也要优化,不然会超时。优化的方法是假如i,j连边,那么如果有一条边(i,k),x[k]>x[j]并且y[k]>y[j]那么(i,k)这条边就没有必要存在了。因为先取(i,j)在去(j,k)会比直接取(i,k)要好。
代码
- #include<cstdio>
- #include<algorithm>
- #define N 10010
- using namespace std;
- int n,i,j,rd[N],t,w,tot,id[N];
- int dp,pre[],p[N],tt[],z[N],ID[N],tmp;
- int f[][];
- struct g{
- int x,y;
- }a[N];
- bool cmp(g a,g b)
- {
- if (a.x==b.x)
- return a.y<b.y;
- return a.x<b.x;
- }
- void link(int x,int y)
- {
- dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y;
- }
- void Dp(int x,int y)
- {
- int i;
- i=p[x];
- while (i)
- {
- int a=tt[i],b=y;
- if (id[a]>id[b])
- swap(a,b);
- if (a!=b)
- f[a][b]=max(f[a][b],f[x][y]+);
- else
- f[a][b]=max(f[a][b],f[x][y]);
- i=pre[i];
- }
- }
- int main()
- {
- scanf("%d",&n);
- for (i=;i<=n;i++)
- scanf("%d%d",&a[i].x,&a[i].y);
- sort(a+,a++n,cmp);
- for (i=;i<=n;i++)
- {
- tmp=0x37373737*;
- for (j=i+;j<=n;j++)
- if ((i!=j)&&(a[i].x<=a[j].x)&&(a[i].y<=a[j].y)&&(a[j].y<tmp))
- {
- tmp=a[j].y;
- rd[j]++;
- link(i,j);
- }
- }
- for (i=;i<=n;i++)
- {
- link(,i);rd[i]++;
- link(i,n+);rd[n+]++;
- }
- t=;w=;z[w]=;
- while (t!=w)
- {
- tot++;
- t++;
- id[z[t]]=tot;
- ID[tot]=z[t];
- i=p[z[t]];
- while (i)
- {
- rd[tt[i]]--;
- if (rd[tt[i]]==)
- {
- w++;z[w]=tt[i];
- }
- i=pre[i];
- }
- }
- for (i=;i<=tot;i++)
- for (j=i;j<=tot;j++)
- Dp(ID[i],ID[j]);
- printf("%d\n",f[n+][n+]-);
- }
BZOJ1930 [Shoi2003]pacman 吃豆豆的更多相关文章
- 【BZOJ1930】[Shoi2003]pacman 吃豆豆 最大费用最大流
[BZOJ1930][Shoi2003]pacman 吃豆豆 Description 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会 ...
- bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]
1930: [Shoi2003]pacman 吃豆豆 题意:两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的 ...
- 1930: [Shoi2003]pacman 吃豆豆
1930: [Shoi2003]pacman 吃豆豆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1969 Solved: 461[Submit][ ...
- 【BZOJ 1930】 [Shoi2003]pacman 吃豆豆 最大费用最大流
如果你知道他是网络流的话你就很快会想到一个最大费用最大流的模型,然后你发现可能T,然而你发现你只用增广两次,然后你就开心的打了出来,然后发现被稠密图里spfa的丧病时间复杂度坑了,还是会T.于是我就开 ...
- 【BZOJ1930】【SHOI2003】吃豆豆
初见杀…… 原题: 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪,只能向右走或者向上走,他们行 ...
- [bzoj]1930 pacman吃豆豆
Description 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪,只能向右走或者向上走,他 ...
- 洛谷 P4066 [SHOI2003]吃豆豆 解题报告
P4066 [SHOI2003]吃豆豆 题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪 ...
- HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角
近期在学习HTML5.爱因斯坦曾说过,"最好的学习就是自己去经历". 于是.我想在学习HTML5的同一时候.做一款简单的小游戏,这样学习起来也会非常有趣的.我想做的是曾经小时候玩儿 ...
- css动画实现吃豆豆
话不多说,直接上代码:(作为一个初学者写的代码,多么0基础都能看的懂吧.) HTML部分 <!DOCTYPE html> <html lang=en> <head> ...
随机推荐
- ADO.NET实体数据模型使用探索1
今天研究了下ADO.NET实体数据模型,想写个关于两张有外键关系的增改删查,以此来稍增加点难度. 编程环境:vs2010+sql2005 1.在SQL2005下建立三张表:学生信息表Student(S ...
- 日志案例分析(PV,UV),以及动态分区
1.实现的流程 需求分析 时间:日,时段 分区表:两级 PV UV 数据清洗 2015-08-28 18:19:10 字段:id,url,guid,tracktime 数据分析 导出 2.新建源数据库 ...
- CSS优先级别计算
a.b.c.d,可以以这四种等级为依据确定CSS选择器的优先级: a-----style 行内样式 个数 +1000 b-----id 个数+100 c-----类 个数+10 d-----类型个数 ...
- pointer-events:none;穿透属性
从属性字面上看可以理解为:手势时间无效. 当我们在ios下想复制一段文字是,不知道原因导致一些莫名的怪异现象:总是无法复制文字,却意外的发现无论怎么着复制的始终都是图片时, 当我们在一个半透明遮罩上想 ...
- [LeetCode]题解(python):086 - Partition List
题目来源 https://leetcode.com/problems/partition-list/ Given a linked list and a value x, partition it s ...
- [LeetCode]题解(python):083 - Remove Duplicates from Sorted List
题目来源 https://leetcode.com/problems/remove-duplicates-from-sorted-list/ Given a sorted linked list, d ...
- leetcode:Factorial Trailing Zeroes
Given an integer n, return the number of trailing zeroes in n!. 最初的代码 class Solution { public: int t ...
- ubuntu mysql 远程连接
最近需要远程连接mysql服务器,先进行简单的测试,过程记录于此. 参考链接: http://blog.chinaunix.net/uid-28458801-id-3445261.html http: ...
- Quartz的配置文件quartz.properties详解
配置 quartz.properties 文件 文件 quartz.properties 定义了 Quartz 应用运行时行为,还包含了许多能控制 Quartz 运转的属性.这个文件应该放在class ...
- PHP回调函数的几种用法
PHP回调函数的实现方法 目录 前言 全局函数的回调 类静态函数的回调 对象的方法的回调 PHP事件模型(观察者模式)的实现思路 前言 最近在开发一个PH ...