Running Routes

\[Time Limit: 12000 ms\quad Memory Limit: 1048576 kB
\]

题意

给出一个正 \(n\) 边形,标号顺时针从 \(0\) 到 \(n-1\),现在给出 \(n \times n\) 的矩阵,表示从点 \(i\) 到点 \(j\) 有一条边,现在想要让你从中选出最多的边,满足选出的边严格不相交。

思路

令 \(dp[i][j]\) 表示顺时针从节点 \(i\) 到节点 \(j\) 内,最多可以选出多少边。注意 \(i\) 可以大于 \(j\),表示 \(i\) 到 \(n-1\) 到 \(0\) 再到 \(j\) 的过程。

那么这段就可以利用区间 \(dp\) 的思想来计算

\[ dp[i][j] = dp[i+1][j-1] + a[i][j]\\
dp[i][j] = max(dp[i][k]+dp[k+1][j])
\]

最后所有的 \(dp[i][i-1]\) 的最大值就是答案。

/***************************************************************
> File Name : H.cpp
> Author : Jiaaaaaaaqi
> Created Time : Thu 14 Nov 2019 05:23:41 PM CST
***************************************************************/ #include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define lowbit(x) x & (-x)
#define mes(a, b) memset(a, b, sizeof a)
#define fi first
#define se second
#define pb push_back
#define pii pair<int, int> typedef unsigned long long int ull;
typedef long long int ll;
const int maxn = 5e2 + 10;
const int maxm = 1e5 + 10;
const ll mod = 1e9 + 7;
const ll INF = 1e18 + 100;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-8;
using namespace std; int n, m;
int cas, tol, T; int a[maxn][maxn];
int dp[maxn][maxn]; int get(int x) {
if(x<1) x+=n;
if(x>n) x-=n;
return x;
} int main() {
// freopen("in", "r", stdin);
scanf("%d", &n);
for(int i=1; i<=n; i++) for(int j=1, x; j<=n; j++) {
scanf("%d", &a[i][j]);
dp[i][j] = 0;
}
for(int i=1; i<=n; i++) dp[i][get(i+1)] = a[i][get(i+1)];
for(int d=3; d<=n; d++) {
for(int i=1, j=get(i+d-1); i<=n; i++, j=get(j+1)) {
dp[i][j] = dp[get(i+1)][get(j-1)]+a[i][j];
for(int x=i; x!=j; x=get(x+1)) {
dp[i][j] = max(dp[i][j], dp[i][x]+dp[get(x+1)][j]);
}
}
}
int ans = 0;
for(int i=1; i<=n; i++)
ans = max(ans, dp[i][get(i-1)]);
printf("%d\n", ans);
return 0;
}

Running Routes Kattis - runningroutes(区间dp)的更多相关文章

  1. [USACO2005 nov] Grazing on the Run【区间Dp】

    Online Judge:bzoj1742,bzoj1694 Label:区间Dp 题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我 ...

  2. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  3. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  4. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  5. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  6. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  7. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  8. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  9. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

随机推荐

  1. 数据库多行数据合并一行(sqlserver、Oracle、Mysql)

    我们日常查询数据时,经常会有将查询到的数据按照某一列分组显示(合并多行数据),比如: 表结构: ),coursename )); 需要将以上数据按照用户名分组,所选课程列不同项之间用逗号隔开,在一行中 ...

  2. nodejs调用cmd命令

    使用 child_process.exec 实现 child_process即子进程可以创建一个系统子进程并执行shell命令,在与系统层面的交互上非常有用 NodeJS子进程提供了与系统交互的重要接 ...

  3. 解决Spring Cloud中Feign第一次请求失败的问题

    在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 com.netflix.hystrix.exception.HystrixTimeoutE ...

  4. Intellij插件之MavenHelper

    作用: 一键查看maven依赖,查看冲突的依赖,一键进行exclude依赖 插件提供地址: https://plugins.jetbrains.com/plugin/7179-maven-helper ...

  5. 如何解决github/amazonaws访问不了的问题

    原文链接: https://www.clclcl.fun/2019/12/12/github-blocked/ 如何解决github/amazonaws访问不了的问题 缘起: github.githu ...

  6. ng 使用阿里巴巴矢量图

    1.进入阿里巴巴矢量图标库中,选择需要下载的图标,添加进项目中 2.进去项目选择Font class 模式,然后下载到本地 3.解压下载的压缩包,把.css/.svg/.ttf/.woff/.woff ...

  7. linux下发布项目

    查看端口

  8. Spring Boot 如何干掉 if else?

    需求 这里虚拟一个业务需求,让大家容易理解.假设有一个订单系统,里面的一个功能是根据订单的不同类型作出不同的处理. 订单实体: service接口: 传统实现 根据订单类型写一堆的if else: 策 ...

  9. JavaIO学习:转换流

    转换流 1.涉及到的类 InputStreamReader:将InputStream转换为Reader OutputStreamWriter:将Writer转换为OutputStream 2.构造器 ...

  10. ionic 股票列表 网络读取数据,实现下拉刷新,上拉加载

    html: <ion-header> <ion-toolbar> <ion-title> 股票 </ion-title> </ion-toolba ...