ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Saki也想要变强之Saki的一日一题(2)

2020-10-29 23:01:21  阅读:224  来源: 互联网

标签:Saki temp int move 矩阵 变强 printf 想要 1000


day 2
题目:
用加括号的方式给出最优的矩阵相乘方案
输入:
多组数据输入
第一行一个整数 n,表示矩阵链的长度(1<=n<=300)
接下来一行n+1个数表示这些矩阵的行数和列数
别问我为什么只有n+1个数,每相邻的两个数表示一个矩阵的大小
输出:
对于每组数据,输出两行,第一行为计算次数,第二行为计算方案,用加括号的方式给出最优的矩阵相乘方案
如果不幸最优方案不唯一,选择优先计算左边的矩阵
代码:
include<stdio.h>
include<limits.h>
include<stdlib.h>
int a[1000],m[1000][1000],s[1000][1000];
int max(int a, int b){
if(a>b)
return a;
else return b;
}
void move(int i,int j){
if(i==j){
printf("A%d", i);
}
else{
printf("(");
move(i, s[i][j]);
move(s[i][j] + 1, j);
printf(")");
}
}
int main()
{
int n,i,l,j,k,temp;
while (~scanf("%d",&n)){
for (i = 0; i <= n;i++)
{
scanf("%d", &a[i]);
}
for (i = 1; i <= n;i++){
m[i][i] = 0;
}
for (l = 2; l <= n;l++){
for (i = 1; i <= n - l + 1;i++)
{
j = i + l - 1;
m[i][j] = INT_MAX;
for (k = i; k <= j - 1;k++){
temp = m[i][k] + m[k + 1][j] + a[i - 1] * a[k]*a[j];
if(temp<m[i][j]){
m[i][j] = temp;
s[i][j] = k;
}
}
}
}
printf("%d\n", m[1][n]);
move(1, n);
printf("\n");
}
}
心得明天~~

标签:Saki,temp,int,move,矩阵,变强,printf,想要,1000
来源: https://www.cnblogs.com/sakisaki/p/13899751.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有