ACM程序设计与竞赛作业

  • 格式:doc
  • 大小:256.00 KB
  • 文档页数:39

下载文档原格式

  / 39
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1ຫໍສະໝຸດ Baidu.A+B for Input-Output Practice (II)
20.A+B for Input-Output Practice (III)
21.A+B for Input-Output Practice (IV)
22.埃及分数
23.完数
24.Fibbonacci Number _Hdu 2070
如果你是辰辰,你能完成这个任务吗?
输入
输入的第一行有两个整数T(1 ≤T ≤1000)和M(1≤M ≤ 100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出
输出只包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
a[k][i1]=a[k-1][i1]; //采完总价值下降
else
a[k][i1]=m1+a[k-1][i1-t1];//值得采的情况;
}
}
k++;
}
printf("%d",a[m][t]);
}
心得:这是一个动态规划的题目,首先定义一个二维数组,根据草药的性价比,优先采取较高的草药,如果时间不够,则降低性价比继续采取草药,直至时间结束,根据采集的草药计算它的最大值,这题通过比较算出可能采的情况,和不能采的情况,如果能采,那再判断值不值得采,得出最优解。
样例输入
70 3
71 100
69 1
1 2
样例输出
3
#include "stdio.h"
void main()
{
int a[102][1002]={0};
int t,t1,m1,m,i,i1,k=1;
scanf("%d%d",&t,&m);
scanf("%d%d",&t1,&m1);
for(i1=1;i1<=t;i1++)//处理第一行
2问题A:金字塔问题
时间限制:1 Sec内存限制:128 MB
提交:54解决:32
[提交][状态][讨论版]
题目描述
給一个金字塔,如上图所示,请你求出一个从塔顶到塔底的路径,要求路径经过的点的数字和最小。
例如上图所示的金字塔的最小路径为:40
输入
输入第一行是一个整数n<1000;
接下来是n行,
第一行一个数;
25. Pakets
26.不要62 _Hdu 2089
1问题B:采药
时间限制:1 Sec内存限制:128 MB
提交:87解决:72
[提交][状态][讨论版]
题目描述
辰辰是个很有潜能、天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
输出
输出一个整数,就是行走的方案数。
样例输入
7 4 4 4
样例输出
6
#include<stdio.h>
void main()
{
int i,j;
int p,m,n,t;
int a[100][100]={0};//定义一个二维数组;
scanf("%d%d%d%d",&n,&p,&m,&t);
ACM程序设计与竞赛作业
1.采药
2.金字塔问题
3.毛毛虫问题
4.Hamming Problem
5.字符串正反连接
6.去掉空格
7.成绩转换
8.金块问题
9.工资问题
10.“水仙花数”问题
11.大小写转换
12.取数游戏
13.整除问题
14.警察抓小偷
15.n!
16.汉诺塔问题
17.猴子吃桃问题(递归)
18.A+B for Input-Output Practice (I)
else
a[i][j]=a[i][j]+a[i+1][j];//求得每次路径最小值;
}
printf("%d",a[1][1]);
}
心得:这个题目主要运用了动态规划的思想,定义一个二维数组,把所输入的数据存入进去,然后从它的第一行处理,比较相邻位置数的大小,取最小的路径和上一行对应的数相加,取得最小路径,进行循环,直到求出数组中a[1][1],即所求的结果。
第二行两个数;
。。。
第n行n个数;
数之间用空格分开。
数的链接方式如图所示。
输出
一个数,就是从塔顶到塔底的路径的最小距离。
样例输入
5
9
12 15
10 6 8
3 18 9 5
19 7 10 4 16
样例输出
40
#include<stdio.h>
void main()
{
int i,j,n;
int a[100][100];定义一个二维数组;
3问题B:毛毛虫问题
时间限制:1 Sec内存限制:128 MB
提交:32解决:16
[提交][状态][讨论版]
题目描述
Mary在她家门口水平种了一排苹果树,共有N棵。
突然Mary发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。
比如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫可能会在第1棵树上或者第3棵树上。如果刚开始时毛毛虫在第1棵树上,过1分钟以后,毛毛虫一定会在第2棵树上。
现在告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫到达第T棵树,一共有多少种行走方案数。
输入
输入四个整数N P M T。
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
for(i=n-1;i>=1;i--)
for(j=1;j<=i;j++)//从最后一行开始处理;
{
if(a[i+1][j]>a[i+1][j+1])
a[i][j]=a[i][j]+a[i+1][j+1];
{
if(i1>=t1)
a[k][i1]=m1;
}
k++;
for(i=2;i<=m;i++)
{ scanf("%d%d",&t1,&m1);
for(i1=1;i1<=t;i1++)
{
if(i1<t1)//不可能采的情况;
a[k][i1]=a[k-1][i1];
else //可以采的情况
{
if(a[k-1][i1]>m1+a[k-1][i1-t1])