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 ;
}

最新文章

  1. QA is more than Testing
  2. 2 Servlet基础
  3. Maven发布web项目到tomcat
  4. html5的download下载标签
  5. java.lang.IllegalStateException异常简单分析和简单解决
  6. c++语法集锦
  7. Standing on Shouder of Giants
  8. ECShop2.7.2详细文件结构及模板结构目录名称
  9. FAQ:win7和win8 64位注册ocx控件方法
  10. C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)
  11. 201521123117 《Java程序设计》第11周学习总结
  12. JAVA对象头
  13. 【大前端攻城狮之路】JavaScript函数式编程
  14. canvas绘图工具
  15. java并发编程系列二:原子操作/CAS
  16. yii2入门安装 Windows7+wamp+yii2
  17. Project Euler:Problem 63 Powerful digit counts
  18. Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie
  19. JS + flash 复制
  20. HashMap实现原理及源码分析之JDK7

热门文章

  1. shell 给未定义的变量设定默认值 ${parameter:-word}
  2. HDU 1312 Red and Black (深搜)
  3. solaris 服务器配置网络
  4. Spring Cloud Eureka服务注册源码分析
  5. bugku逗号过滤注入
  6. Mel倒谱系数
  7. 浅析linux内核中timer定时器的生成和sofirq软中断调用流程【转】
  8. Docker壳的配置笔记
  9. HIbernate学习笔记5 之 查询
  10. HIbernate学习笔记3 之 缓存和 对象的三种状态