uvalive4256(DP)
来源:互联网 发布:华为手机数据迁移 编辑:程序博客网 时间:2024/04/30 04:51
题意:
给出一张图,然后给出一个序列,修改序列中一些数字,要求使这个序列相邻的两个点.要么是相同的点,要么在图中是相邻点;
思路:
dp[i][j]代表序列前i个,并且第i个的值是j ,满足这一关系,最少修改几次几次;
那么dp[i][j] = min ( dp[i - 1][k]) (k与j是相连的);
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int N = 105;int INF = 0x3f3f3f3f;int n1,n2,l;int suq[2 * N];int dp[2 * N][N];vector<int> v[N];int main(){int t;scanf("%d",&t);while(t--) {memset(dp, 0 ,sizeof(dp));scanf("%d%d",&n1,&n2);for(int i = 0; i <= n1; i++) {v[i].clear();v[i].push_back(i);}int x,y;for(int i = 0; i < n2; i++) {scanf("%d%d",&x,&y);v[x].push_back(y);v[y].push_back(x);}scanf("%d",&l);for(int i = 1; i <= l; i++) {scanf("%d",&suq[i]);}for(int i = 1; i <= l; i++) {for(int j = 1; j <= n1; j++) {dp[i][j] = INF;for(int k = 0; k < v[j].size(); k++) {if(j == suq[i])dp[i][j] = min(dp[i][j], dp[i - 1][v[j][k]]);elsedp[i][j] = min(dp[i][j], dp[i - 1][v[j][k]] + 1);}}}int m = INF;for(int i = 1; i <= n1; i++) {m = min(m, dp[l][i]);}printf("%d\n",m);}return 0;}
0 0
- uvalive4256(DP)
- UVALive4256-Salesman(dp)
- uvalive4256
- UVALive4256[Salesmen] 动态规划
- dp
- dp
- dp
- 【DP】
- dp
- dp
- DP
- DP
- DP
- DP
- DP
- dp
- DP
- dp
- 网站搭建之路一:Windows下PHP环境的搭建
- 奥巴马筹款网站的制作过程
- MySQL 数据类型
- MFC 实现对话框 背景贴图的几种方式
- ios 输入框输入6位数字
- uvalive4256(DP)
- Gridview不会自动撑开
- Cocos2dx3.x 使用cocostudio导出的骨骼动画
- zoj 1311 poj 1144 Network(无向图顶点联通度)
- 解决ngui 粒子 层级显示问题
- 自学笔记之Quartz2D
- <Garry和图表第二次约会>HighCharts, Android传数据(可以不用ajax你造吗)
- C51中的关键字data,idata,xdata,pdata,bdata
- 【Leetcode】:Unique Binary Search Trees