smoj-1042数字三角形
来源:互联网 发布:网站视频分段播放 php 编辑:程序博客网 时间:2024/05/21 19:36
暑假的时候想这题,就想了好久,今天终于知道怎么做啦~好开心~来写写~嘿嘿~和大家分享下吧~(数字三角形)
这题据说是动态规划的入门题,大家好好看看哦~嘿嘿~我给大家讲讲思路吧~希望对你们有帮助~嘿嘿~
思路:从上至下的计算,与下面相邻数字之和比较大的那个,赋值给上面的那个数,一个个加上去,这样说,是不是有点小困惑呢,嘿嘿~给大家画一个图吧:
下面是程序:
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else return b;
}
int main()
{
int n,i,j,a[100][100],z=1;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&a[i][j]);
for(i=n-1;i>0;i--)
for(j=1;j<=i;j++)
{
a[i][j]=max(a[i+1][j]+a[i][j],a[i][j]+a[i+1][j+1]);
}
printf("Triangle #%d: %d\n",z++,a[1][1]);
}
}是不是很简单呢~嘿嘿~大家一起加油吧~希望明天可以好好学了哦~嘿嘿~
上面的用动态规划做的~
下面给大家用递归的方法做:
#include<stdio.h>
int n,i,j,a[100][100],z=1;
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
int p(int i,int j)
{
if(i==n)
return a[i][j];
return a[i][j]+max(p(i+1,j),p(i+1,j+1));
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&a[i][j]);
printf("Triangle #%d: %d\n",z++,p(1,1));
}
}这是今天上午改写的,希望对大家有所帮助~
- smoj-1042数字三角形
- 数字三角形!
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- vi 查找替换大全
- 大二的汇编,让人云里雾里!!!
- SAP传输系统TMS的配置和实例
- 线程同步通信
- 小米越来越不靠谱了
- smoj-1042数字三角形
- 编程之美的诱惑
- How Tomcat Works学习笔记<六>
- 我java启蒙老师 郝斌老师
- Android 让adb logcat打印内核调试信息
- Linux的特殊文件权限
- android中的回调举例:在surfaceview中结束宿主activity
- 快速发现Windows系统监听或开放端口
- 程序员心境