题解 P1004 方格取数
2024-09-06 18:41:00
动态规划Yes?
设i为路径长度,(为什么i这一维可以省掉见下)f[j][k]表示第一个点到了(j,i-j),第二个点到了(k,j-k)
则
int ji=i-j,ki=i-k;
f[j][k]=max(f[j][k],f[j-][k-]);
f[j][k]=max(f[j][k],f[j-][k]);
f[j][k]=max(f[j][k],f[j][k-]);
f[j][k]+=s[j][ji];
if(j!=k&&ji!=ki) f[j][k]+=s[k][ki];
由于只从上一个状态转移,所以可以像01背包那样倒序循环,保证只访问上一个状态。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define R register int
using namespace std;
int n,cnt,f[][],s[][];
struct node {
int u,v,w;
}a[];
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=(ret<<)+(ret<<)+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
inline int max(int a,int b) {return a>b?a:b;}
signed main() {
n=g(); R u=g(),v=g(),w=g();
while(u&&v&&w) {a[++cnt].u=u,a[cnt].v=v,a[cnt].w=w;u=g(),v=g(),w=g();}
for(R i=;i<=cnt;i++) {s[a[i].u][a[i].v]=a[i].w;}
for(R i=;i<=(n<<);i++) for(R j=i;j>=;j--) for(R k=i;k>=;k--) {
R ji=i-j,ki=i-k;
f[j][k]=max(f[j][k],f[j-][k-]);
f[j][k]=max(f[j][k],f[j-][k]);
f[j][k]=max(f[j][k],f[j][k-]);
f[j][k]+=(s[j][ji]+s[k][ki]*(j!=k));
} printf("%d\n",f[n][n]);
}
2019.3.1
最新文章
- Linux下安装tar.gz类型的jdk,并配置环境变量
- Itext Demo
- 为Autodesk Viewer添加自定义工具条的更好方法
- 模板引擎freemarker的简单使用教程
- VS2010 安装使用STLPort
- CCF真题Z型输出
- Razor 语法快速参考
- mysql主从配置(清晰的思路)
- NSlog警告—— 编译器打印NSInteger类型
- [转]PB 基本语句 循环语句
- css代码实现
- IO和socket编程
- php 例子 如何转换ISO8601为 utc时间
- mssql查询过去一段时间数据库中执行过的语句及执行效率
- Keepalived概述和安装(1)
- UML学习——类之间的关系
- 线程之-volatile
- shell脚本中gsub的应用
- 【Spring】18、springMVC对异常处理的支持
- 远程服务器安装mysql数据库
热门文章
- Hive- Hive安装
- 分享知识-快乐自己:SpringMvc中的四种数据源及相关配置(整合快速集成开发)
- 常见css兼容问题
- CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)
- N1游记
- ACM学习历程—HDU1716 排列2(dfs &;&; set容器)
- 【Lintcode】119.Edit Distance
- docker的操作
- TCP头部格式详解,附Wireshark对TCP头部抓包分析
- [cf2015ICLFinalsDiv1J]Ceizenpok’s formula