[P1941][NOIP2014T3] 飞扬的小鸟 0/1背包+完全背包
时间:2019-08-18
本文章向大家介绍[P1941][NOIP2014T3] 飞扬的小鸟 0/1背包+完全背包,主要包括[P1941][NOIP2014T3] 飞扬的小鸟 0/1背包+完全背包使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:给出一张地图,有若干个竖直的管道,有一只鸟从地图最左边要飞到地图最右边,每次点击屏幕,小鸟就会上升,若不点击,小鸟就会下降;途中小鸟不能飞(掉)出地图,也不能碰到管道;
求这一只鸟从地图最左边是否能飞到地图最右边,如果能,那么最小的点击次数是多少;
解法:0/1背包+完全背包;
1.0/1背包;当小鸟处在 (i,j)这个位置时,可以不点击屏幕;那么此时就是一个0/1背包;状态转移方程:f[i][j]=min(f[i-1][j-x[i]]+1,f[i][j-x[i]]+1);
2.完全背包;当小鸟处在(i,j)这个位置时,可以点击多次屏幕;那么此时就是一个完全背包;状态转移方程:f[i][j]=min(f[i][j],f[i-1][j+y[i]]);
有管道的地方可以 f[i][j]=inf;转移是从左到右,从下到上;
附上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=10086;
const int inf = 0x3f3f3f3f;
inline int read(){
int ref=0,x=1; char ch=getchar();
while(!isdigit(ch)){if(ch=='-')x=-1;ch=getchar();}
while(isdigit(ch)){ref=ref*10+ch-'0';ch=getchar();}
return ref*x;
}
int n,m,p;
int x[N],y[N];
int low[N],high[N],dp[N][2019];
bool jud[N];
int main()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++) x[i]=read(),y[i]=read();
for(int i=1;i<=n;i++){
low[i]=1;
high[i]=m;
}
for(int i=1;i<=p;i++){
int a,b,c;
a=read(),b=read(),c=read();
jud[a]=1;
low[a]=b+1;
high[a]=c-1;
}
memset(dp,0x3f3f3f,sizeof(dp));
for(int i=1;i<=m;i++) dp[0][i]=0;
for(int i=1;i<=n;i++){
for(int j=x[i]+1;j<=m+x[i];j++) dp[i][j]=min(dp[i-1][j-x[i]]+1,dp[i][j-x[i]]+1);
for(int j=1;j<=m-y[i];j++) dp[i][j]=min(dp[i][j],dp[i-1][j+y[i]]);
for(int j=m+1;j<=m+x[i];j++) dp[i][m]=min(dp[i][m],dp[i][j]);
for(int j=1;j<low[i];j++) dp[i][j]=inf;
for(int j=high[i]+1;j<=m;j++) dp[i][j]=inf;
}
int ans=inf;
for(int j=1;j<=m;j++) {
ans=min(ans,dp[n][j]);
}
if(ans<inf) printf("1\n%d",ans);
else{
int place;
bool ljw=false;
for(int i=n-1;i>=1;i--) {
for(int j=1;j<=m;j++){
if(dp[i][j]<inf){
place=i;
ljw=true;
break;
}
}
if(ljw) break;
}
ans=0;
for(int i=1;i<=place;i++){
if(jud[i]) ans++;
}
printf("0\n%d",ans);
}
return 0;
}
原文地址:https://www.cnblogs.com/nnezgy/p/11371895.html
- 移动端测试方案--sptt
- 服务端事件EventSource揭秘
- 让docker中的mysql启动时自动执行sql文件
- 通过执行计划中的CONCATENATION分析sql问题(r4笔记第16天)
- 《小美好》短评文本情感分析+生成词云
- 通过shell定制dbms_advisor.quick_tune(r4笔记第15天)
- 跨浏览器tab页的通信解决方案尝试
- 深度学习的GPU:深度学习中使用GPU的经验和建议
- socket.io搭配pm2(cluster)集群解决方案
- 用 Python 来刷微信「跳一跳」游戏的记录
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化
- 高吞吐koa日志中间件
- 关于SQLRecoverableException问题的排查和分析(r4笔记第13天)
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes K8S之Pod 生命周期与postStart、preStop事件
- Kubernetes K8S之资源控制器RC、RS、Deployment详解
- python教程 | 最标准的地图调用方式(国家测绘局提供数据)
- Kubernetes K8S之资源控制器StatefulSets详解
- Kubernetes K8S之资源控制器Daemonset详解
- Kubernetes K8S之资源控制器Job和CronJob详解
- Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
- Kubernetes K8S之Pod跨namespace名称空间访问Service服务
- Kubernetes K8S之Service服务详解与示例
- Kubernetes K8S之Ingress详解与示例
- Kubernetes K8S之存储Secret详解
- 在K8s上轻松部署Tungsten Fabric的两种方式
- Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务
- Servlet执行流程
- 最新的spring boot技术实现登录、列表、分页、上传等功能