P1941 飞扬的小鸟

细节题

上升是完全背包

下降是01背包

(数组访问越界本机怎么能过???(大雾))

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#define re register
using namespace std;
void read(int &x){
char c=getchar();x=;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
}
int min(int &a,int &b){return a<b?a:b;}
int max(int &a,int &b){return a>b?a:b;}
void swap(int &a,int &b){a^=b;b^=a;a^=b;}
#define N 10002
int ans=2e9,n,m,k,f[N][];
int a[N],b[N],l[N],r[N],v[N];
int main(){
read(n); read(m); read(k); int q1,q2,q3;
for(re int i=;i<=n;++i){
read(a[i]); read(b[i]);
l[i]=; r[i]=m;//下/上界
}
for(re int i=;i<=k;++i){
read(q1); read(q2); read(q3);
if(q2>q3) swap(q2,q3);
l[q1]=q2+; r[q1]=q3-; v[q1]=;//v:当前列是否有管子
}
memset(f,,sizeof(f)); int inf=f[][],tot=;
for(re int i=;i<=m;++i) f[][i]=;
for(re int i=;i<=n;++i){
for(re int j=a[i]+;j<=m+a[i];++j) //上升完全背包
f[i][j]=min(f[i][j-a[i]],f[i-][j-a[i]])+;
for(re int j=m+;j<=m+a[i];++j) //飞到m时特判
f[i][m]=min(f[i][m],f[i][j]);
for(re int j=;j<=m-b[i];++j)//下降01背包
f[i][j]=min(f[i][j],f[i-][j+b[i]]);
for(re int j=;j<l[i];++j) f[i][j]=inf;//其他地方不能飞
for(re int j=r[i]+;j<=m;++j) f[i][j]=inf;
bool gg=;
for(re int j=l[i];j<=r[i];++j) gg=(gg&&f[i][j]>=inf);
if(gg){printf("0\n%d",tot); return ;}//无法飞下去
tot+=v[i];
}
for(re int i=l[n];i<=r[n];++i) ans=min(ans,f[n][i]);
printf("1\n%d",ans);
return ;
}

P1941 飞扬的小鸟(背包)的更多相关文章

  1. 洛谷P1941 飞扬的小鸟(背包 dp)

    题意 题目链接 Sol 很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数 向上转移的时候是完全背包 向下转移判断一下就可以 #include<bits/s ...

  2. Codevs 3729==洛谷P1941 飞扬的小鸟

    P1941 飞扬的小鸟 456通过 2.4K提交 题目提供者该用户不存在 标签动态规划2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 Flappy Bird 是一 ...

  3. 洛谷 P1941 飞扬的小鸟

    洛谷 P1941 飞扬的小鸟 原题链接 首先吐槽几句 noip都快到了,我还不刷起联赛大水题! 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节 ...

  4. UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP

    #17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:// ...

  5. [洛谷P1941] 飞扬的小鸟

    洛谷题目链接:飞扬的小鸟 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了 ...

  6. 2018.11.06 洛谷P1941 飞扬的小鸟(背包)

    传送门 上升看成完全背包. 下降看成01背包. 注意边界转移就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int ...

  7. 洛谷P1941 飞扬的小鸟 [noip2014] 背包

    正解:背包 解题报告: 话说好久没做背包的题了,都有些陌生了?这几天加强基础题目多刷点儿dp和背包趴qwq 其实这题是95...然后我下了我错的那个测试点,我答案是9874正解是9875...然后读入 ...

  8. 洛谷P1941飞扬的小鸟 完全背包

    思维难度不大,就是有许多细节要注意. 1.不能开滚动数组. 2.要特判飞过天花板的情况. Code: #include<cstdio> #include<algorithm> ...

  9. P1941 飞扬的小鸟[dp]

    题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣 ...

随机推荐

  1. Swift-'!','?'用法

    ///'!','?','as'的用法 ///'!'与'?'用法与可选类型(Optional) ///首先要了解Optional类型包括什么, ///Optional类型的值包括: 1.nil 2.值 ...

  2. synchronized将任意对象作为对象监视器

    多个线程调用同一个对象中的不同名称的synchronized同步方法或synchronized(this)同步代码块时,调用的效果就是按顺序执行,也就是同步的,阻塞的.这说明synchronized同 ...

  3. 12.文件系统fs

    文件系统fs ==> 提供文件的读取, 写入, 更名, 删除, 遍历目录, 链接等POSIX文件系统操作 1.fs.readFile(filename, [encoding], [callbac ...

  4. Windows Phone 有关独立存储(一)

    private const string foldername = "temp1"; private const string filename = foldername + &q ...

  5. 获得当前正在显示的activity的类名

    需要加一个权限: <uses-permission android:name="android.permission.GET_TASKS"/> ActivityMana ...

  6. javascript飞机大战-----0010完整版代码

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

  7. Redis连接(二)

    Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...

  8. Python使用logging来记录日志

    #encoding:utf-8 import logging.config from logging.handlers import RotatingFileHandler import Config ...

  9. FZU 2107 Hua Rong Dao(dfs)

    Problem 2107 Hua Rong Dao Accept: 318 Submit: 703 Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...

  10. NAT STURN,ICE

    NAT原理与NAT穿越 最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下. 先做一个约定: 内网A中有:A1(192.168.0.8).A2(192.168.0.9)两用户 网关 ...