URAL1029. Ministry(DP+路径)
路径麻烦啊 很多细节 倒回去搜一遍
卡了一节数据库。。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define LL long long
int u,o,path[],flag;
LL sum[][],dp[][],f[][];
int m,n;
void dfs(int u,int v)
{
if(flag)
return ;
int i,j,tt=o;
if(v==)
{
o++;
path[o] = u;
for(i = o ; i > ; i--)
printf("%d ",path[i]);
printf("%d\n",path[]);
flag = ;
return ;
}
if(dp[v][u]==dp[v-][u]+f[v][u])
{
o = tt;
path[++o] = u;
dfs(u,v-);
}
for(i = u-; i >= ; i--)
{
if(dp[v][i]!=dp[v-][i]+f[v][i])
continue;
o = tt;
if(dp[v][u]==dp[v][i]+sum[v][u]-sum[v][i])
{
for(j = u ; j>= i ; j--)
path[++o] = j;
dfs(i,v-);
}
}
for(i = u+ ; i <= m ; i++)
{
if(dp[v][i]!=dp[v-][i]+f[v][i])
continue;
o = tt;
if(dp[v][u]==dp[v][i]+sum[v][i-]-sum[v][u-])
{
for(j = u; j <= i; j++)
path[++o] = j;
dfs(i,v-);
}
}
o = tt;
}
int main()
{
int i,j,g;
flag=;
scanf("%d%d",&n,&m);
for(i = ; i <= n ;i++)
{
for(j = ; j <=m ; j++)
{
scanf("%lld",&f[i][j]);
sum[i][j] = sum[i][j-]+f[i][j];
}
}
for(i = ;i <= n ;i++)
{
for(j = ; j <=m ; j++)
dp[i][j] = dp[i-][j]+f[i][j];
for(j = ; j <= m ; j++)
{
for(g = ; g < j ;g++)
dp[i][j] = min(dp[i][j],dp[i][g]+sum[i][j]-sum[i][g]);
for(g = j+ ; g <=m ; g++)
dp[i][j] = min(dp[i][j],dp[i][g]+sum[i][g-]-sum[i][j-]);
}
}
LL ans = dp[n][],u = ;
for(i = ; i <= m ; i++)
{
if(ans>=dp[n][i])
{
ans = dp[n][i];
if(dp[n][i]==dp[n-][i]+f[n][i])
u = i;
}
}
o++;
path[o] = u;
if(n==)
printf("%d\n",u);
else
dfs(u,n-);
return ;
}
URAL1029. Ministry(DP+路径)的更多相关文章
- DP+路径 URAL 1029 Ministry
题目传送门 /* 题意:就是从上到下,找到最短路,输出路径 DP+路径:状态转移方程:dp[i][j] = min (dp[i-1][j], dp[i][j-1], dp[i][j+1]) + a[[ ...
- POJ1015 && UVA - 323 ~Jury Compromise(dp路径)
In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of ...
- Codeforces Round #598 (Div. 3)E(dp路径转移)
题:https://codeforces.com/contest/1256/problem/E 题意:给一些值,代表队员的能力值,每组要分3个或3个以上的人,然后有个评价值x=(队里最大值-最小值), ...
- poj2264 dp+路径
//Accepted 208K 0MS //dp //最长公共子序列+路径 #include <cstdio> #include <cstring> #include < ...
- poj1141Brackets Sequence(dp+路径)
链接 dp好想 根据它定义的 记忆化下就行 路径再dfs一遍 刚开始以为要判空格 所以加了判空格的代码 后来知道不用 .. #include <iostream> #include< ...
- [IOI1999]花店橱窗布置(DP路径记录)
题目:[IOI1999]花店橱窗布置 问题编号:496 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V ...
- P1052 过河 线性dp 路径压缩
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 【CH5104】I-country 线性dp+路径输出
pre:在网格中,凸多边形可以按行(row)分解成若干段连续的区间 [ l , r ] ,且左端点纵坐标的值(col)满足先减后增,右端点纵坐标先增后减. 阶段:根据这个小发现,可以将阶段设置成每一行 ...
- poj1417(带权并查集+背包DP+路径回溯)
题目链接:http://poj.org/problem;jsessionid=8C1721AF1C7E94E125535692CDB6216C?id=1417 题意:有p1个天使,p2个恶魔,天使只说 ...
随机推荐
- 无限大整数相加算法的C语言源代码
忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是 ...
- 给String添加reverse方法
我们知道Array有个reverse方法,String则没有,但可以Array来实现,字符串有个split方法可以轻易的将String转换为Array. String.prototype.revers ...
- [leetcode]352. Data Stream as Disjoint Intervals
数据流合并成区间,每次新来一个数,表示成一个区间,然后在已经保存的区间中进行二分查找,最后结果有3种,插入头部,尾部,中间,插入头部,不管插入哪里,都判断一下左边和右边是否能和当前的数字接起来,我这样 ...
- strcpy函数导致release版程序崩溃
最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...
- 空对象模式(Null Object Pattern)
空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract ...
- 避免ajax请求过多,导致内存溢出,请求之后回收资源
php试题网 http://phpshiti.com/ http://www.jb51.net/article/30458.htm success: function (data, textStatu ...
- centos 6.4 samba 权限 selinux权限配置
http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100444.html(参考) SELINUX 策略 配置好samba后, 输入 ...
- lnmp 虚拟主机配置及重写
lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim ...
- 几个css的小知识点(一)
1.对于不能确定宽度的div让它水平居中. <div class='father'> <div class='son'>居中</div> </div> ...
- C++ 实现设计模式之观察者模式
1. 什么是观察者模式? 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在 ...