zoj3541(区间dp+贪心)
来源:互联网 发布:济南编程培训 编辑:程序博客网 时间:2024/06/04 00:49
链接:点击打开链接
题意:给出一排按钮,要求把所有按钮全部按下,每移动一单位距离需要一单位时间,给出每个按钮的位置,并且每个按钮按下后经过一定的时间又会弹起来,把所有按钮按下的步骤
代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;int t[205],d[205];int dp[205][205][2],path[205][205][2];int main(){ //dp[i][j][0]代表按完[i,j]区间的按钮并停留在左端点 int n,i,j,l,r,le,re,tmp; //dp[i][j][1]代表按完[i,j]区间的按钮并停留在右端点 while(scanf("%d",&n)!=EOF){ //当要按完一个区间内所有按钮时,如果按中间任意一个则按左右 for(i=1;i<=n;i++) //两个端点的按钮时一定会出现走重复的路,因此每一次一定从左右 scanf("%d",&t[i]); //端点开始按 for(i=1;i<=n;i++) scanf("%d",&d[i]); memset(dp,0,sizeof(dp)); for(l=2;l<=n;l++){ for(i=1;i<=n-l+1;i++){ j=i+l-1; le=dp[i+1][j][0]+d[i+1]-d[i]; //按完端点的按钮在从下个区间的左或者右开始按 re=dp[i+1][j][1]+d[j]-d[i]; if(le<=re){ dp[i][j][0]=le; path[i][j][0]=0; } else{ dp[i][j][0]=re; path[i][j][0]=1; } if(t[i]<=dp[i][j][0]) dp[i][j][0]=INF; le=dp[i][j-1][0]+d[j]-d[i]; re=dp[i][j-1][1]+d[j]-d[j-1]; if(le<=re){ dp[i][j][1]=le; path[i][j][1]=0; } else{ dp[i][j][1]=re; path[i][j][1]=1; } if(t[j]<=dp[i][j][1]) dp[i][j][1]=INF; } } if(dp[1][n][0]<INF){ //输出的时候最后一个数后面不能有空格 tmp=path[1][n][0]; //这题好像没有PE,因此会造成WA printf("1"); l=2,r=n; } else if(dp[1][n][1]<INF){ tmp=path[1][n][1]; printf("%d",n); l=1,r=n-1; } else{ puts("Mission Impossible"); continue; } while(l<=r){ if(tmp==0){ tmp=path[l][r][0]; printf(" %d",l++); } else{ tmp=path[l][r][1]; printf(" %d",r--); } } printf("\n"); } return 0;}
0 0
- zoj3541(区间dp+贪心)
- 【ZOJ3541】The Last Puzzle 区间DP+贪心
- zoj3541(区间dp)
- 区间dp-zoj3541-The Last Puzzle
- ZOJ3541:The Last Puzzle(区间DP)
- ZOJ3541-The Last Puzzle 区间dp
- ZOJ3541与时间相关的区间dp+记录路径
- poj2393(类似dp的区间贪心)
- uva11400Lighting System Design(区间dp+贪心思想)
- New Year Bonus Grant(SGU195,贪心or区间DP)
- nyoj 1023 还是回文 (区间dp加贪心)
- 【BZOJ4580】[Usaco2016 Open]248【区间DP】【或 贪心】
- 区间贪心
- 区间贪心
- 区间DP
- 区间DP
- 区间DP
- 区间DP
- CentOS6 下rsync服务器配置
- Shell脚本调试技巧
- iphone访问限制密码忘记了怎么办
- java设计模式-观察者模式(广播机制,消息订阅)
- ubuntu设置护眼色
- zoj3541(区间dp+贪心)
- mac os x使用Git简易入门教程
- Unity3D——游戏序列化
- Unable to instantiate Action, UserAction
- Android oncreate中获取控件宽高
- 咳咳 突然就想开一个博客了
- LeetCode-242.Valid Anagram
- java join()方法
- 队列的实现