JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包
2024-09-01 10:06:53
http://172.20.6.3/Problem_Show.asp?id=1445
很容易看出来动态规划的本质,但是之前写的时候被卡了一下(不止一下),还是写一下题解。
直接暴力O(n*m^2)大概是70分,比较划算。
100分需要对上升下降方式找规律然后优化到O(nm);
可以看出,70分算法有很多时间浪费在没必要的上升计算上,为了减少上升计算,我们可以在预处理后把上升计算变为只有一次。
把下降的放在最后处理。
观察可以发现f[i][x]的赋值只可能来自于下面升上来的,其实本质就是一个有一点特殊的完全背包,然后背包处理就可以了。(不一定要像我那样写的,我觉得其实有更好看更容易懂的写法)
最后再处理一个下降的方案比较后赋值。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const int maxn=;
int n,m,k;
int a[maxn][]={};
int f[maxn][]={},g[]={};
int d[maxn]={};
struct nod{
int p,l,h;
}e[maxn];
bool mmp(nod aa,nod bb){
return aa.p<bb.p;
}
int main(){
//freopen("wtf.in","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i][],&a[i][]);
}
for(int i=;i<=k;i++){
scanf("%d%d%d",&e[i].p,&e[i].l,&e[i].h);
}sort(e+,e++k,mmp);
for(int i=;i<=k;i++){
d[e[i].p]=i;
}
memset(f,,sizeof(f));
int ans=f[][],cnt=f[][];
for(int i=;i<=m;i++)f[][i]=;
int w=;
for(int i=;i<n;i++){
int mi=,ma=m;
if(d[i]){
mi=e[d[i]].l+,ma=e[d[i]].h-;
}
int ff=;
memset(g,,sizeof(g));
for(int j=mi;j<=ma;j++){
g[j]=f[i][j];
if(f[i][j]!=cnt)ff=;
}
for(int j=;j<=m;j++){
int x=min(m,a[i+][]+j);
g[x]=min(g[x],g[j]+);
}
for(int j=;j<=m;j++){
int x=min(m,a[i+][]+j);
f[i+][x]=min(f[i+][x],g[j]+);
}
for(int j=mi;j<=ma;j++){
if(j-a[i+][]>) f[i+][j-a[i+][]]=min(f[i+][j-a[i+][]],f[i][j]);
}
if(!ff){
printf("0\n%d\n",w);
return ;
}
if(d[i])w++;
}
for(int i=;i<=m;i++){
ans=min(ans,f[n][i]);
}
printf("1\n%d\n",ans);
return ;
}
最新文章
- QA is more than Testing
- 2 Servlet基础
- Maven发布web项目到tomcat
- html5的download下载标签
- java.lang.IllegalStateException异常简单分析和简单解决
- c++语法集锦
- Standing on Shouder of Giants
- ECShop2.7.2详细文件结构及模板结构目录名称
- FAQ:win7和win8 64位注册ocx控件方法
- C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)
- 201521123117 《Java程序设计》第11周学习总结
- JAVA对象头
- 【大前端攻城狮之路】JavaScript函数式编程
- canvas绘图工具
- java并发编程系列二:原子操作/CAS
- yii2入门安装 Windows7+wamp+yii2
- Project Euler:Problem 63 Powerful digit counts
- Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie
- JS + flash 复制
- HashMap实现原理及源码分析之JDK7