ZOJ3164【区间dp】
来源:互联网 发布:买情侣装的淘宝店 编辑:程序博客网 时间:2024/06/03 17:57
题意:
有n个人,有一种关系叫做8g关系,给出m个关系,给出n个人的阵列
问你最多能拿走多少人,拿走以后相邻就是相邻了
思路:
典型的区间dp;
dp[i][j] 代表 i-j 最多能去多少人;
如果第i个人能和第j个人有关系而且中间[i+1,j-1]也能全部取走,那么直接dp[i][j]=dp[i+1][j-1]+2;
不能的话就枚举一下区间分割点,然后取最大和;
有n个人,有一种关系叫做8g关系,给出m个关系,给出n个人的阵列
问你最多能拿走多少人,拿走以后相邻就是相邻了
思路:
典型的区间dp;
dp[i][j] 代表 i-j 最多能去多少人;
如果第i个人能和第j个人有关系而且中间[i+1,j-1]也能全部取走,那么直接dp[i][j]=dp[i+1][j-1]+2;
不能的话就枚举一下区间分割点,然后取最大和;
#include<bits/stdc++.h>using namespace std;const int N=3e2+10;const int INF=0x3f3f3f3f;int n,m;int dp[N][N],seq[N];int inx[N][N];int main(){ while(~scanf("%d%d",&n,&m)) { int a,b; memset(inx,0,sizeof(inx)); for(int i=1; i<=m; i++) { scanf("%d%d",&a,&b); inx[a][b]=inx[b][a]=1; } for(int i=1;i<=n;i++) scanf("%d",&seq[i]); memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) if(inx[seq[i]][seq[i+1]]) dp[i][i+1]=2; for(int i=n-2; i>=1; i--) { for(int j=i+2; j<=n; j++) { if(dp[i+1][j-1]==j-i-1&&inx[seq[i]][seq[j]]) dp[i][j]=j-i+1; else { for(int k=i; k<j; k++) { if(dp[i][k]+dp[k+1][j]>dp[i][j]) dp[i][j]=dp[i][k]+dp[k+1][j]; } } } } printf("%d\n",dp[1][n]); } return 0;}
0 0
- ZOJ3164【区间dp】
- 【DP】zoj3164
- zoj3164
- 区间DP
- 区间DP
- 区间DP
- 区间DP
- ##区间dp##
- 区间dp
- 区间DP
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间dp
- 区间DP
- 获取对象的位置的方法
- Android RecyclerView滚动定位
- 解决mysql 报1044错误的问题
- socketpair
- jquery指定区域打印带样式
- ZOJ3164【区间dp】
- spring boot 使用application.properties 进行外部配置
- 从UDP的”连接性”说起–告知你不为人知的UDP
- LeetCode题解:Reverse String
- ceil细胞合并 每一秒一个细胞只能合并一次 求达到不可合并状态所需的秒数
- MySQL Packet for query is too large 问题及解决方案
- nginx 负载均衡策略及配置
- 8天学通MongoDB——第五天 主从复制
- 淘宝详情界面的头部视图被覆盖的效果