uva 1427 - Parade 游行 需要优化!
来源:互联网 发布:淘宝炸鱼鱼雷在哪卖 编辑:程序博客网 时间:2024/06/06 04:56
题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4173
状态表示和转移都不难,需要优化,我用了优先队列辅助。
/**========================================== * This is a solution for ACM/ICPC problem * * @source:uva 1427 - Parade * @type: dp * @author: wust_ysk * @blog: http://blog.csdn.net/yskyskyer123 * @email: 2530094312@qq.com *===========================================*/#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<queue>using namespace std;typedef long long ll;const int INF =0x3f3f3f3f;const int maxn= 100 ;const int maxm= 10000 ;int n,m,k;int val[maxn+4][maxm+4];int dis[maxn+4][maxm+4];int sum[maxn+4][maxm+4];int sVal[maxn+4][maxm+4];int dp[maxn+4][maxm+4];struct Node{ int val,dis; Node(){} Node(int val,int dis):val(val),dis(dis){} bool operator<(const Node y) const { return val<y.val; }};priority_queue<Node> q;void input(){ for(int i=0;i<=n;i++) { sVal[i][0]=0; for(int j=1;j<=m;j++) { scanf("%d",&val[i][j]); sVal[i][j]=sVal[i][j-1]+val[i][j]; } } for(int i=0;i<=n;i++) { sum[i][0]=0; for(int j=1;j<=m;j++) { scanf("%d",&dis[i][j]); sum[i][j]=sum[i][j-1]+dis[i][j]; } }}void work(){ memset(dp[n+1],0,(m+1) *sizeof dp[n+1][0]); for(int i=n;i>=0;i--) {// memset(dp[i],0,(m+1) *sizeof dp[i][0]); while(!q.empty()) q.pop(); for(int j=0;j<=m;j++) { q.push(Node( dp[i+1][j]+sVal[i][m]-sVal[i][j],sum[i][j]) ); while(!q.empty()) { Node now=q.top(); if(abs(now.dis - sum[i][j])>k ) { q.pop(); continue; } dp[i][j]=now.val-(sVal[i][m]-sVal[i][j]); break; } } while(!q.empty()) q.pop(); for(int j=m;j>=0;j--) { q.push(Node( dp[i+1][j]+sVal[i][j]-sVal[i][0],sum[i][j]) ); while(!q.empty()) { Node now=q.top(); if(abs(now.dis - sum[i][j])>k ) { q.pop(); continue; } dp[i][j]=max(dp[i][j],now.val-sVal[i][j] ); break; } } } int ans=0; for(int j=0;j<=m;j++) { ans=max(ans,dp[0][j]); } printf("%d\n",ans);}int main(){ while(~scanf("%d%d%d",&n,&m,&k)&&(n+m+k)) { input(); work(); } return 0;}
0 0
- uva 1427 - Parade 游行 需要优化!
- UVA 1427 Parade
- UVA 1427 Parade(dp)
- uva-1427 Parade (单调队列优化dp)
- uva 1427 - Parade(dp+单调队列)
- Parade - UVa 1427 dp+优先队列
- Parade。。。。
- Parade
- POJ 3926 Parade 单调队列优化dp
- hdu Parade(单调队列优化 dp)
- HDU2490 Parade 单调队列优化DP
- 1427 - Parade (dp+单调队列)
- UVaLive 4327 | POJ 3926 - Parade (单调队列优化DP)
- 【单调队列优化dp】Uvalive4327丨Poj3926 Parade
- UVA - 1427(经典滑动队列优化dp)
- uva 1427(单调队列优化dp)
- B. Parade
- 抗日游行场面
- android的数据存储方式------5种
- 指针法去空格
- Git初学笔记(一)
- HDU 1160 FatMouse's Speed
- python模块系列之 - time,datetime,calendar
- uva 1427 - Parade 游行 需要优化!
- Fragment获取context
- [神经网络]1.4-Using neural nets to recognize handwritten digits-A simple network to classify ...(翻译)
- oj效率问题
- SetWindowPos函数详解
- L2TP协议
- Spring Boot 多数据源
- 插件大集合
- x265-1.7版本-common/frame.h注释