博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM——天上掉馅饼(DP)
阅读量:4049 次
发布时间:2019-05-25

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

注意点:

time=1:活动范围为4-6;
time=2:3-7;
time=3:2-8;
time=4:1-9;
time=5:0-10(全范围)
突破口:
状态:dp[i,j]在i秒,j位置能获得的最大饼数
状态转移方程:
dp[i,j]=max(dp[i-1,j],dp[i-1,j-1],dp[i-1,j+1]);
此题涉及到一些代码技巧,要多注意。

代码如下:

#include
#include
#include
using namespace std;int dp[100001][11],a[11]; //a[i]为辅助数组,记录某一时刻,i位置饼的数量struct bing{ int p; int t;}b[100001];bool cmp(bing x,bing y) //按掉落时间从小到大排序{ if(x.t!=y.t) return x.t
n-1) //k>n-1了,此时一定要结束循环了,否则会报错!!!!! break; } }//printf("%d %d\n",dp[Time][5],dp[0][5]); if(step==1) for(j=4;j<=6;j++) dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[j]; else if(step==2) for(j=3;j<=7;j++) dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[j]; else if(step==3) for(j=2;j<=8;j++) dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[j]; else if(step==4) for(j=1;j<=9;j++) dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[j]; else for(j=0;j<=10;j++) if(j==0) dp[i][j]=max(dp[i-1][j],dp[i-1][j+1])+a[j]; else if(j==10) dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[j]; else dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[j]; // printf("%d %d\n",dp[Time][5],dp[0][5]); } for(i=0;i<=10;i++) if(dp[Time][i]>=ans) ans=dp[Time][i]; printf("%d\n",ans); } return 0;}

补充:其实这道题也可以像数塔一样做,后面有空试着A一下。

转载地址:http://bbdci.baihongyu.com/

你可能感兴趣的文章
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>