ACM程序设计与竞赛作业 下载本文

内容发布更新时间 : 2024/12/23 5:29:05星期一 下面是文章的全部内容请认真阅读。

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) 19. 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 25. Pakets

26. 不要62 _Hdu 2089

1问题 B: 采药

时间限制: 1 Sec 内存限制: 128 MB

提交: 87 解决: 72 [提交][状态][讨论版]

题目描述

辰辰是个很有潜能、天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?

输入

输入的第一行有两个整数T(1 ≤T ≤1000)和M(1≤M ≤ 100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

输出

输出只包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

样例输入

70 3 71 100 69 1 1 2

样例输出

3

#include \void main() {

int a[102][1002]={0}; int t,t1,m1,m,i,i1,k=1;

scanf(\ scanf(\

for(i1=1;i1<=t;i1++)//处理第一行 {

if(i1>=t1) a[k][i1]=m1; }

k++; for(i=2;i<=m;i++)

{ scanf(\ for(i1=1;i1<=t;i1++) {

if(i1

else // 可以采的情况 {

if(a[k-1][i1]>m1+a[k-1][i1-t1])

a[k][i1]=a[k-1][i1]; //采完总价值下降 else

a[k][i1]=m1+a[k-1][i1-t1];//值得采的情况; } }

k++; }

printf(\}

心得:这是一个动态规划的题目,首先定义一个二维数组,根据草药的性价比,优先采取较

高的草药,如果时间不够,则降低性价比继续采取草药,直至时间结束,根据采集的草药计算它的最大值,这题通过比较算出可能采的情况,和不能采的情况,如果能采,那再判断值不值得采,得出最优解。

2问题 A: 金字塔问题

时间限制: 1 Sec 内存限制: 128 MB

提交: 54 解决: 32 [提交][状态][讨论版]

题目描述

給一个金字塔,如上图所示,请你求出一个从塔顶到塔底的路径,要求路径经过的点的数字和最小。

例如上图所示的金字塔的最小路径为:40

输入

输入第一行是一个整数n<1000; 接下来是n行,

第一行一个数; 第二行两个数; 。。。

第n行n个数; 数之间用空格分开。 数的链接方式如图所示。

输出

一个数,就是从塔顶到塔底的路径的最小距离。

样例输入

5 9

12 15 10 6 8 3 18 9 5 19 7 10 4 16

样例输出

40

#include void main() {

int i,j,n;

int a[100][100];定义一个二维数组; scanf(\ for(i=1;i<=n;i++) for(j=1;j<=i;j++) {

scanf(\ }

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]; else

a[i][j]=a[i][j]+a[i+1][j]; //求得每次路径最小值; }