【记忆化搜索】bzoj1652 [Usaco2006 Feb]Treats for the Cows
2024-10-19 18:31:41
跟某NOIP的《矩阵取数游戏》很像。
f(i,j)表示从左边取i个,从右边取j个的答案。
f[x][y]=max(dp(x-1,y)+a[x]*(x+y),dp(x,y-1)+a[n-y+1]*(x+y))。
ans=max{f(i,n-i)}。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 2001
int n,a[N],f[N][N],ans;
int dp(int x,int y)
{
if(f[x][y]!=-1) return f[x][y];
if((!x)&&(!y)) return f[x][y]=0;
if(!x) return f[x][y]=dp(x,y-1)+a[n-y+1]*(x+y);
if(!y) return f[x][y]=dp(x-1,y)+a[x]*(x+y);
return f[x][y]=max(dp(x-1,y)+a[x]*(x+y),dp(x,y-1)+a[n-y+1]*(x+y));
}
int main()
{
memset(f,-1,sizeof(f));
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=0;i<=n;++i)
ans=max(ans,dp(i,n-i));
printf("%d\n",ans);
return 0;
}
最新文章
- Git 取消跟踪已版本控制的文件
- ilspy导致c# dll代码被窃取
- paper 104: 彩色图像高速模糊的懒惰算法
- Java 中System里getProperty(something)
- 10-Java 网络通信
- switch为什么不能用string类型?
- xml学习总结(二)
- bzoj 3123 [Sdoi2013]森林(主席树,lca,启发式合并)
- Entity Framework Code First 映射继承关系
- Linux中后台执行任务
- C++函数调用的反汇编过程及Thunk应用
- python之路第五篇之递归(进阶篇:续:经典例子剖析)
- 解决mac 中的myeclipse控制台中文乱码问题
- Revit二次钢筋
- 基于timestamp和nonce的防重放攻击
- js运用6
- 查看CPU信息
- Vue2.5开发去哪儿网App 第五章笔记 下
- Openstack入门篇(十八)之Cinder服务-->;使用NFS作为后端存储
- curl获取远程文件内容