博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces727F Polycarp's problems(dp)
阅读量:7105 次
发布时间:2019-06-28

本文共 1508 字,大约阅读时间需要 5 分钟。

题意:

给你一个长度为n(750)的数列,数的范围是(1e9—1e9),必须按顺序从左端走到右端,

每到一个位置,当前的值就加上当前位置的值,给你m(2e5)个询问,每个询问给你一个初始值,

问你至少要去掉几个位置的值才能保证行进过程中不会出现负数

思路:

http://blog.csdn.net/aufeas/article/details/53031439

大神的dp思路

令f[i][j]表示从第i~n个问题中留下 j 个问题所需要的最小心情值,这样我们只需要知道过程中的心情值即可,

因为最后的心情值不会用到。于是得到转移方程f[i][j]=min(f[i+1][j],max(0,f[i+1][j-1]-a[i])。

最后在f[1]上查找答案即可。 时间复杂度:O(n^2+m*logn)

/* ***********************************************Author        :devil************************************************ */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=a;i>=b;i--)#define ou(a) printf("%d\n",a)#define pb push_back#define pii pair
#define mkp make_pair#define IN freopen("in.txt","r",stdin);#define OUT freopen("out.txt","w",stdout);using namespace std;const int inf=0x3f3f3f3f;const int mod=1e9+7;const int N=1e3+10;int n,m,a[N];LL dp[N][N],x;int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,inf,sizeof(dp)); dp[n+1][0]=0; for(int i=n;i>0;i--) for(int j=0;j<=n-i+1;j++) { dp[i][j]=dp[i+1][j]; if(j) dp[i][j]=min(dp[i][j],max(dp[i+1][j-1]-a[i],0ll)); } for(int i=1;i<=m;i++) { scanf("%lld",&x); printf("%d\n",n-(upper_bound(dp[1],dp[1]+n+1,x)-dp[1]-1)); } return 0;}

 

转载于:https://www.cnblogs.com/d-e-v-i-l/p/6114941.html

你可能感兴趣的文章
inux访问控制的流程-tcp_wrappers讲解
查看>>
DNS域名解析过程 五月的仓颉
查看>>
查看linux 版本
查看>>
2017-3-27日碎碎念
查看>>
ORACLE 归档模式
查看>>
OFFICE 2007 SP3后续补丁微软官方下载地址
查看>>
zabbix监控redis多实例
查看>>
"Volume Shadow Copy Service" error
查看>>
crontab 计划任务 linux计划任务基本
查看>>
18.存储过程--SQL
查看>>
我的友情链接
查看>>
ISA Server签名
查看>>
C# C/S 图片验证码功能源码
查看>>
SCVMM 2012 SP1 安装与配置指南(一)概述
查看>>
在eclipse中使用断言Assert
查看>>
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
查看>>
win2003域控迁移2008
查看>>
文档相似度算法
查看>>
Docker在生产环境中的应用--开篇
查看>>
zabbix监控window2008 R2的IIS一些性能监控
查看>>