一道C语言动态规划题
#includeiostream
#includecstring
using namespace std;
int a[101][101],f[101][101],n,T;
int maxi(int a,int b,int c)
{
if(ab)
a=b;
if(ac)
a=c;
return a;
}
int main()
{
cinT;
for(;T;T–)
{
cinn;
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
for(int i=1;i=n;i++)
for(int j=1;j=n;cina[i][j],j++);
//f[i][j]=max{f[i+1][j-1],f[i+1][j],f[i+1][j+1]}+a[i][j],1=i,j=n.
for(int i=n;i=1;i–)
for(int j=1;j=n;j++)
f[i][j]=maxi(f[i+1][j-1],f[i+1][j],f[i+1][j+1])+a[i][j];
int maxans=-32768;
for(int i=1;i=n;i++)
if(f[1][i]maxans)
maxans=f[1][i];
coutmaxansendl;
}
return 0;
}
这是一个我写的程序,LZ试试这个可以不
你的程序唯一一处不对劲的地方,就是规划过程中的else语句。把它改成if(j!=0j!=m-1)试试?
怎么用c语言解决洛谷压缩问题的加强版
?
洛谷压缩问题的加强版是一个经典的动态规划问题,可以使用c语言来解决。
首先,定义一个二维数组dp[i][j],其中i表示字符串的起始位置,j表示字符串的终止位置,dp[i][j]表示从字符串i到字符串j的最小压缩长度。
然后,使用动态规划的思想,从小到大计算dp[i][j]的值,具体的步骤如下:
1. 如果i=j,则dp[i][j]=1;
2. 如果ij,则dp[i][j]可以表示为:
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j]),其中k从i到j-1。
最后,返回dp[0][n-1]即可得到最终的最小压缩长度。
C语言-动态规划
#include stdio.h
#include stdlib.h
struct tree {
int value;
struct tree *left;
struct tree *right;
};
#define min(x, y) x y ? x : y
int a[3][3] = {10, 9, 14, 9, 12, 10, 6, 5, 8};
void add_tree_node(struct tree **node, int x, int y, int depth)
{
//printf(“x = %d, y = %d, value = %d, depth = %d\n”, x, y, a[x][y], depth);
*node = (struct tree *)malloc(sizeof(struct tree));
((struct tree *)*node)-value = a[x][y] + a[x][x];
if(depth == 1) {
((struct tree *)*node)-left = ((struct tree *)*node)-right = NULL;
return;
} else {
add_tree_node((((struct tree *)*node)-left), y, (y+1)%3, depth-1);
add_tree_node((((struct tree *)*node)-right), y, (y+2)%3, depth-1);
}
depth–;
}
void print_tree(struct tree *t)
{
if(t == NULL)
return;
printf(“%d “, t-value);
print_tree(t-left);
print_tree(t-right);
}
void free_tree(struct tree *t)
{
if(t == NULL)
return;
free_tree(t-left);
free_tree(t-right);
free(t);
}
int get_short_time(struct tree *t)
{
if(t-left == NULL || t-right == NULL)
return t-value;
return(min(get_short_time(t-left), get_short_time(t-right))+t-value);
}
void main()
{
struct tree *root;
int i, j, minx=0, miny=1;
for(i = 0; i 3; i++)
for(j = 0; j 3; j++)
if(i != j a[minx][miny] a[i][j])
minx = i, miny = j;
printf(“拆卸时间最短的是从第%d套仪器换为第%d套仪器,时间为%d\n”, minx+1, miny+1, a[minx][miny]);
// 创建深度为5的二叉树,将做5次试验的全部可能路径都放到二叉树中
add_tree_node(root, minx, miny, 5);
print_tree(root);
printf(“\n”);
printf(“最短可以完成全部实验的时间是:%d\n”, get_short_time(root));
free_tree(root);
}
一道c语言动态规划题目,在行数多的情况下程序无法运行
粗看你的代码,下面这几句显然是有问题的
应该是从0开始到height -1,否则在接近最大值的情况下,Parray[i][j]是会越界溢出的
for (int i = 1;i = height;i++){
for (int j = 1;j = i;j++){
scanf(“%d”,Parray[ i ][ j ]);
}
}
C语言动态规划问题
靠。。没有问题背景,排版这么糟糕叫人怎么看啊,改一改再来吧。。
用C语言编写动态规划解决0-1背包问题,如何实现从.txt文件中读取数据
•程序要求
•动态规划的过程必须通过DProcessing( wi , vi , m[i,j] ) 计算
•wi表示物品 i的重量,
•vi 代表物品 i的价值,
•m[ i,j ] 代表当前正在规划的重量为 j 的背包 的价值
•注:动态规划的过程禁止直接写在主函数中!