Fancy Mouse
- -|||
问题的关键是如何将这些满足要求的数排序。
我们可以将数组下标为0的元素设为1,并且将3个指针均放在它的位置上。以后,第i个指针乘以第i个数(i=1,2,3),取最小的放入数组,并且更新指针。这样可以保证数组里的元素都是单调递增而且不漏掉一个的。问题就解决了。
#include<iostream>
using namespace std;

const long k = 100000;
long num[k];
int main()
{
    
int p[3],m,k[3],min,_;
    
while(cin>>p[0]>>p[1]>>p[2]>>m)
    
{
        num[
0= 1;
        k[
0= k[1= k[2= 0;
        
for(int i=1;i<=m;i++)
        
{
            min 
= 0;
            _ 
= num[k[0]] * p[0];
            
if(_ > num[k[1]] * p[1]){_ = num[k[1]] * p[1]; min = 1;}
            
if(_ > num[k[2]] * p[2]){_ = num[k[2]] * p[2]; min = 2;}
            num[i] 
= _;
            
for(int j=0;j<3;j++)
                
while(_ >= num[k[j]] * p[j]) k[j]++;
        }

        cout
<<num[m]<<endl;
    }

    
return 0;
}
posted on 2005-10-28 16:40  Fancy Mouse  阅读(320)  评论(1编辑  收藏  举报