博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA - 10564 Paths through the Hourglass
阅读量:7238 次
发布时间:2019-06-29

本文共 1813 字,大约阅读时间需要 6 分钟。

传送门:https://vjudge.net/problem/UVA-10564

题目大意:给你一张形如沙漏一般的图,每一个格子有一个权值,问你有多少种方案可以从第一行走到最后一行,并且输出起点最靠前的方案,以及此方案的起点编号,起点相同则字典序最小。

题解:

  很容易想到一个DP,dp[i][j][S]代表到第i层,第j列,从第一层到这里的路径和为S的方案数,最后只要查询最后一行的方案数即可了。但是这样很不好输出方案!我们可能需要从终点向上dfs,但是又无法保证起点编号最小以及字典序最小。但是我们能从终点向上dfs,那么如果我们反过来DP呢?可行啊,这样就可以从起点向终点dfs了,贪心选择可行的路径即可。

  需要注意的是上下两个一半的沙漏的转移一个是到j与j+1,一个是j与j-1,要考虑清楚细节!

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define RG register 8 #define LL long long 9 #define fre(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);10 using namespace std;11 const int MAXN=22,MAXS=599;12 int n;13 LL ans,S;14 LL a[MAXN*2][MAXN],dp[MAXN*2][MAXN][MAXS];15 void dfs(int x,int y,int sum);16 int main()17 {18 while(scanf("%d%lld",&n,&S)!=EOF)19 {20 if(n+S==0)break;21 for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) scanf("%lld",&a[i][j]);22 for(int i=n+1;i<2*n;i++) for(int j=1;j<=i-n+1;j++) scanf("%lld",&a[i][j]);23 memset(dp,0,sizeof dp);24 for(int i=1;i<=n;i++) dp[n*2-1][i][a[n*2-1][i]]=1;25 for(int i=n*2-2;i>=n;i--)26 for(int j=1;j<=i-n+1;j++)27 for(int k=0;k<=S;k++)28 {29 if(dp[i+1][j][k] && k+a[i][j]<=S) dp[i][j][k+a[i][j]]+=dp[i+1][j][k];30 if(dp[i+1][j+1][k] && k+a[i][j]<=S) dp[i][j][k+a[i][j]]+=dp[i+1][j+1][k];31 }32 for(int i=n-1;i>=1;i--)33 for(int j=1;j<=n-i+1;j++)34 for(int k=0;k<=S;k++)35 {36 if(dp[i+1][j][k] && k+a[i][j]<=S) dp[i][j][k+a[i][j]]+=dp[i+1][j][k];37 if(dp[i+1][j-1][k] && k+a[i][j]<=S) dp[i][j][k+a[i][j]]+=dp[i+1][j-1][k];38 }39 ans=0; for(int i=1;i<=n;i++) ans+=dp[1][i][S]; printf("%lld\n",ans);40 for(int i=1;i<=n;i++)41 if(dp[1][i][S])42 {43 printf("%d ",i-1);44 int x=1,y=i,sum=S;45 while(x

 

转载于:https://www.cnblogs.com/D-O-Time/p/7701377.html

你可能感兴趣的文章
异步消息队列zeromq实现服务器间高性能通信
查看>>
MVC中在路由表routes集合中添加Route实例的一些问题。
查看>>
当你被辞退时
查看>>
新时代ITer们的思考及购书有奖活动
查看>>
微软邮件系统Exchange 2013系列(十)客户端和移动设备管理
查看>>
系统集成项目管理工程师软考辅导——3年真题透解与全真模拟
查看>>
以安装桌面体验功能为例来探索windows2012服务器管理器的新变化
查看>>
ubuntu安装与测试hadoop1.1.0版本
查看>>
运维开发实战考题:计算教育网站投票排名
查看>>
Lync 小技巧-54-Elastix IVR 转换Wav方法
查看>>
JAVAEE知识的系统性有多重要?再谈非线性学习方法
查看>>
Yii2 HOW-TO(3):调试工具yii2-debug和Xdebug(失败)
查看>>
PC上安装MAC X Lion
查看>>
大共享永久免费云服务器评测体验
查看>>
虚拟化基础架构Windows 2008篇之4-将Windows计算机加入到域
查看>>
about script engine on jdk 6 is mozilla rhino
查看>>
android之Apache Http初使用——向服务器发送请求
查看>>
nohup命令 使用方法详解
查看>>
Intent 和 Intent Filter
查看>>
Linux下MySQL的主从热备(自动同步)配置
查看>>