`
- 浏览:
269776 次
- 性别:
- 来自:
沈阳
-
学了一阵子的CUDA,突然有点感概,突然感觉C语言、计算机组成原理、编译原理、微机原理等课程是多么重要,大学浪费了。。现在绝大部分的并行程序设计都是基于C扩展的。谭浩强的那本C学得再久感觉还是没学透,所以今天又上杭电ACM做了一道题,就当复习C语言了。。整个程序编了20分钟,调了一个多小时,C指针真难!!!
FatMouse' Trade
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6744 Accepted Submission(s): 1942
Problem Description
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
Input
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
Output
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
Sample Input
5 37 24 35 220 325 1824 1515 10-1 -1
Sample Output
13.333
31.500
My C code:
#include<stdio.h>
#include<malloc.h>
//节点类型
typedef struct node
{
int j; //存javabean
int f; //存cat food
double per; //存兑换率
struct node * next;
}snode;
//完成插入节点
void insert(snode * &head,int l,int r)
{
double f=l*1.0/r;
snode *p=head->next,*p1,*tmp;
tmp=(snode *)malloc(sizeof(snode));
tmp->j=l;
tmp->f=r;
tmp->per=f;
tmp->next=NULL;
if(p==NULL)
{
tmp->next=NULL;
head->next=tmp;
}
else
{
p1=head;
while(p)
{
if(p->per>f)
{
p1=p;
p=p->next;
}
else
{
p1->next=tmp;
tmp->next=p;
break;
}
}
if(p==NULL)
{
p1->next=tmp;
}
}
}
//完成销毁链表,保留头结点
void destroy(snode * &head)
{
snode *p,*p1;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
p1=p->next;
free(p);
p=p1;
}
if(p!=NULL)
free(p);
}
//完成输入数据和输出结果
int main()
{
int m,n,i,left,right;
double result=0.0,trade=0.0;
snode * head,* p;
head=(snode *)malloc(sizeof(snode));
head->next=NULL;
scanf("%d%d",&m,&n);
while(m!=-1&&n!=-1)
{
result=0.0;trade=0.0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&left,&right);
insert(head,left,right);
}
p=head->next;
/*printf("以下是建立成的链表:\n");
while(p)
{
printf("%d %d %.2f\n",p->j,p->f,p->per);
p=p->next;
}*/
while(p)
{
if((trade+p->f)<=m)
{
result+=p->j;trade+=p->f;p=p->next;
}
else
{
result=result+(m-trade)*p->per;
break;
}
}
printf("%.3f\n",result);
destroy(head);
scanf("%d%d",&m,&n);
}
return 0;
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
【ACM竞赛之FatMouse' Trade 贪心法】主要涉及的是优化策略问题,具体是将一个实际问题转化为经典的背包问题,通过贪心算法来寻找最优解。在这个问题中,我们有一只老鼠,它拥有M磅的猫食,需要在N个房间中通过交换...
【PJBlog2 FatMouse模板】是一款专为PJBlog2博客系统设计的个性化主题,它旨在提升用户网站的视觉效果和用户体验。PJBlog2是一个开源的博客系统,深受个人和小型团队喜爱,因其易于使用和高度可定制性而受到广泛欢迎...
1107 FatMouse and Cheese 简单题,不过题目描述有些混乱 1136 Multiple 简单题,BFS 1276 Optimal Array Multiplication Sequence 简单题 1255 The Path 简单题 1250 Always On the Run 简单题 1213 ...
《fatmouse的C++》是针对C++编程语言的一个初级教程,主要面向初学者,旨在帮助他们快速入门C++编程。C++是一种通用的、面向对象的编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,具有高效、灵活和强大的...
标题 "PJBlog2 两个人的世界" 指的是一款基于PJBlog平台的个性化主题模板,主要面向情侣或个人分享日常生活、情感故事等。这个描述暗示了该模板设计温馨、浪漫,可能包含了一些特色功能,如双人日记、互动模块或者...
在描述中提到的“FatMouse's Trade”问题是一个典型的贪心算法应用实例。问题设定是FatMouse有M磅的猫粮,想要换取JavaBean,仓库中的每个房间含有不同数量的JavaBean,需要付出相应数量的猫粮,而且可以选择支付...
例如,“Sum Problem”可能需要计算连续整数的和,“Number Sequence”可能涉及特定的数字序列操作,“Elevator”可能与电梯调度算法有关,而“FatMouse' Trade”可能是一个涉及动态规划或搜索策略的问题。...
- 1009: FatMouse' Trade:这题难度稍增,但思路清晰,通过排序和优化策略即可解答。 【题目分类】 课件将题目分为两类: 1. 傻瓜型:如1004和1008,这类题目对参赛者的技术要求较低,主要测试基础编程能力。 2. ...
在给定的题目"FatMouse's Trade"中,问题涉及到如何用有限的猫粮(贪心决策变量)换取最多的JavaBean(目标变量),并且每间仓库的交易比例可以是任意实数。由于这个问题没有明确的最优子结构特征,因此不适合直接...
6. **FatMouse' Trade**: 可能是一个基于策略的游戏问题,要求计算最优交易策略。解题时需要深入理解游戏规则,并能构建有效的算法模型。 7. **Fibonacci Again**: 与斐波那契数列相关的题目,除了常规的递归和...
1107 FatMouse and Cheese 简单题,不过题目描述有些混乱 1136 Multiple 简单题,BFS 1276 Optimal Array Multiplication Sequence 简单题 1255 The Path 简单题 1250 Always On the Run 简单题 1213 ...
1001 计算直线的交点数 1002 FatMouse's Speed1003 Common Subsequence1004 Max Sum 1005 Super Jumping! Jumping! Jumping! 1006 免费馅饼 1007 Humble Numbers1008 Monkey and Banana 1009 龟兔赛跑 1010 数塔
9. **1105FatMouse's Tour.cpp**:题目可能与迷宫求解或最短路径相关,可能要用到深度优先搜索(DFS)或广度优先搜索(BFS)。 10. **1093Monkey and Banana.cpp**:猴子和香蕉的问题可能涉及到动态规划或贪心算法...
最后,课件中还提到一个问题"FatMouse's Speed",这是一个可能需要动态规划解决的实际应用问题,但具体解题策略并未给出,通常这类问题可以通过定义状态和状态转移方程来解决。 总的来说,杭州电子大学的动态规划...
最后,我们看一个HDOJ_1160题——FatMouse's Speed。这个问题涉及到给定一组老鼠的重量和速度,我们要找出每只老鼠被猫抓住的概率,并返回最小概率。为了解决这个问题,我们可以先按照老鼠的重量和速度排序,然后...
最后,教程给出了一个具体的问题——FatMouse's Speed,要求根据给出的速度和时间计算出鼠标的移动距离。这类问题也可以通过动态规划或贪心策略来解决,取决于具体细节。 总结来说,本篇教案的重点在于讲解动态规划...
同样,1100题“Mondriaan's Dream”和1107题“FatMouse and Cheese”虽然也属于动态规划,但可能需要更复杂的组合公式或技巧。 对于一些题目,如1066题“Square Ice”和1245题“Triangles”,可能需要更高级的算法...
在 FatMouse's Speed 问题中,动态规划同样大放异彩。通过对老鼠的重量和速度进行排序,我们可以利用动态规划的策略来优化速度的计算和比较过程,快速得到问题的解。 动态规划之所以在算法竞赛中被广泛运用,源于它...