博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
捡金币
阅读量:7223 次
发布时间:2019-06-29

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

time:3s 难度:Day2 T3

长长的题面
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这是一道好难的题。

正解是DP+单调队列。(蒟蒻不会啦,看了题解也迷迷糊糊)
我只写了一个裸的DP,期望值60分,意外惊喜地拿了80分,好开心。
我们枚举时间,f[t][i][j][k]表示第t秒站在(i,j),已经用了k次闪现所获得的最大金币数
转移方程见代码,还是比较容易理解的。(对于 t 我是从零开始存的)
时间复杂度:T*C*W*n*n ≈ 5*10^7 ,60%,3s大概是能过的

#include
#include
#include
#include
#define LL long long#define INF 1000000007using namespace std;int n,C,W,T,ans;int s[101][26][26];int f[101][26][26][151];//f[t][i][j][k]表示第t秒站在(i,j),已经用了k次闪现所获得的最大金币数 int MAX(int &x,int y){
if(y>x) x=y;}//取大 bool judge(int x,int y){ if(x<=n&&x>=1&&y<=n&&y>=1) return 1; return 0;}int main(){ scanf("%d%d%d%d",&n,&C,&W,&T); for(int i=1;i<=T;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) scanf("%d",&s[i][j][k]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[0][i][j][0]=s[1][i][j]; for(int t=1;t
=0) { if(judge(i,j-p*2)) MAX(f[t][i][j][k],f[t-1][i][j-p*2][k-p]+s[t+1][i][j]); if(judge(i,j+p*2)) MAX(f[t][i][j][k],f[t-1][i][j+p*2][k-p]+s[t+1][i][j]); if(judge(i-p*2,j)) MAX(f[t][i][j][k],f[t-1][i-p*2][j][k-p]+s[t+1][i][j]); if(judge(i+p*2,j)) MAX(f[t][i][j][k],f[t-1][i+p*2][j][k-p]+s[t+1][i][j]); } } } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=0;k<=W;k++) MAX(ans,f[T-1][i][j][k]); printf("%d",ans); return 0; }

转载于:https://www.cnblogs.com/dfsac/p/7587808.html

你可能感兴趣的文章
the application could not be verified
查看>>
[转]Centos配置国内yum源
查看>>
redis数据类型和应用场景
查看>>
Spring IOC
查看>>
Fragment的onCreateView和onActivityCreate之间的区别(转)
查看>>
AC日记——统计难题 hdu 1251
查看>>
在仿真器中运行时跳过Windows Azure Startup任务
查看>>
android 获取路径目录方法以及判断目录是否存在,创建目录
查看>>
数列问题[HAOI2004模拟]
查看>>
2012各大IT公司校招笔试题整理
查看>>
phpcms 后台分页
查看>>
《需求工程》阅读笔记之六
查看>>
架构阅读笔记5
查看>>
IIS5.1使用虚拟目录部署网站
查看>>
Git 深度学习填坑之旅三(分支branch、远程操作)
查看>>
括号匹配问题
查看>>
UVA 10766 Organising the Organisation
查看>>
「美团 CodeM 复赛」城市网络
查看>>
python 将Excel表格中的一列数据转化成多行数据
查看>>
Go多线程与channel通信
查看>>