储蓄罐问题

yixiayizi 2008-03-02 03:21:25
Description

储蓄罐中有一定的金币,但数量未知.现要求在不破坏储蓄罐的前提下估计总价值.
已知储蓄罐当前的重量,空储蓄罐的重量,以及储蓄罐中的货币种类及对应的价值和重量.
你要做的任务就是根据给定的信息,估计储蓄罐中的最小价值量.


Input

第一行输入T,表明该问题有T组实例;
每组实例输入正整数E(空储蓄罐重量),F(当前储蓄罐重量);( 1 <= E <= F <= 10000 )
接着输入正整数N(货币种类数);( 1 <= N <= 500 )
接下来输入N行,每一行输入P,W,分别表示该种货币的价值和重量.( 1 <= P <= 50000, 1 <= W <= 10000 )


Output

如果该实例"可实现的"(根据给定的储蓄罐重量,经过计算不可能由该组实例的货币来实现的话,即确定该组实例为"不可实现的"),为每一个实例输出"The minimum amount of money in the piggy-bank is X.".其中"X"表示该实例的最小价值量.
如果该实例"不可实现的",则输出一行"This is impossible.".


Sample Input


3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4


Sample Output


The minimum amount of money in the piggy-bank is 60.
The minimum amount of money in the piggy-bank is 100.
This is impossible.

我的程序:

#include<iostream>
using namespace std ;

typedef struct node
{
int p , w ;
double info ;
}node;

int cmp ( const void * a ,const void * b )
{
node *c = (node *) a ;
node *d = (node *) b ;
if ( c->info > d->info )
return 1 ;
else
if ( c->info < d->info )
return -1 ;
else
{
if ( c->w > d->w )
return 1 ;
else
return -1;
}
}


int main ()
{
int T , E , F , N , i , x ,tw,ff;
node st[500];
while ( cin >> T )
{
while ( T > 0 )
{
cin >> E >> F ;
tw = F - E ;
x = 0 ;
cin >> N ;
for ( i = 0 ; i < N ; i ++ )
{
cin >> st[i].p >> st[i].w ;
st[i].info = ( double ) st[i].p / (double ) st[i].w ;
}
qsort((void *)st , N , sizeof ( st[0] ) , cmp ) ;
while (1)
{
for ( i = 0 ; i < N && tw > 0 ; i ++ )
{

while ( st[i].w <= tw )
{
tw = tw - st[i].w ;
x = x + st[i].p ;
}

}
if ( tw == 0 )
{
ff = 1 ;
break ;
}
if ( tw < 0 )
{
tw = tw + st[i - 1].w ;
x = x - st[i].p ;
continue ;
}
if ( i == N )
{
ff = 0 ;
break ;
}
}
if ( ff == 1 )
cout << "The minimum amount of money in the piggy-bank is " << x << '.' << endl ;
else
cout << "This is impossible." << endl ;
T -- ;
}
}
return 0 ;
}


题目给的数据通过了,但是服务器上的过不去,请教问题出在哪里了?
...全文
120 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
laolaoliu2002 2008-03-02
  • 打赏
  • 举报
回复
看一下背包问题

64,314

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧