电路布线问题
2017-01-01 17:47
246 查看
作电路板时,将n条连线分布到若干绝缘层上。在同一层的连线不相交。电路布线问题就是要确定将哪些连线安排到第一层上,使该层上有尽可能多的连线。
可以考虑最长连续递增子序列的方法求出结果
下面是动态规划,dp[i][j]中的一维是上面的结点,二维是下面的结点,图片中的一维数组是电路板上面布线对应的下结点
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define M 101
int n,val[M],dp[M][M],ans;
int main()
{
int i,j;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&val[i]);
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
if (j>=val[i])
dp[i][j]=max(dp[i-1][j],dp[i-1][val[i]-1]+1);
// else
// dp[i][j]=dp[i-1][j];
}
printf("%d\n",dp
);
return 0;
}
/*
10
8 7 4 2 5 1 9 3 10 6
6
1 5 4 3 2 6
*/
可以考虑最长连续递增子序列的方法求出结果
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define M 101 int n,a[M],dp[M]; int ans; int main() { int i,j; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); ans=0; dp[1]=1; for (i=2;i<=n;i++) { dp[i]=1; for (j=1;j<i;j++) if (a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1); ans=max(ans,dp[i]); // printf("%d %d\n",i,dp[i]); } printf("%d\n",ans); return 0; } /* 10 8 7 4 2 5 1 9 3 10 6 结果:4 6 1 5 4 3 2 6 结果:3 */
下面是动态规划,dp[i][j]中的一维是上面的结点,二维是下面的结点,图片中的一维数组是电路板上面布线对应的下结点
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define M 101
int n,val[M],dp[M][M],ans;
int main()
{
int i,j;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&val[i]);
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
if (j>=val[i])
dp[i][j]=max(dp[i-1][j],dp[i-1][val[i]-1]+1);
// else
// dp[i][j]=dp[i-1][j];
}
printf("%d\n",dp
);
return 0;
}
/*
10
8 7 4 2 5 1 9 3 10 6
6
1 5 4 3 2 6
*/
相关文章推荐
- 0017算法笔记——【动态规划】电路布线问题
- 算法设计--电路布线问题(分支限界法求解)
- 电路布线问题
- 算法java实现--动态规划--电路布线问题
- C++ 电路布线/最短路径问题
- 电路布线问题
- 电路布线问题
- 电路布线问题
- 0017算法笔记——【动态规划】电路布线问题
- 算法--电路布线问题
- 算法复习-----------利用列队解决电路布线问题
- 电路布线问题的几种动态规划算法
- 电路布线问题
- 算法设计--电路布线问题(分支限界法求解)
- 算法复习--------------利用堆栈解决电路布线问题
- 算法3.电路布线和0-1背包问题
- 动态规划-电路布线问题
- 电路布线中要注意的一些问题
- DP动态规划-电路布线问题
- 【动态规划】电路布线问题