【转】HDU 3199 Hamming Problem: 规律打表
应该不是数论···逻辑思维?找规律?暂且放到支个分类下···
我的理解:
数组 num表 保存 只有P1 P2 or P3的因子的 常数 并按递增顺序。
通过已有的常数 每次循环相应的乘以P1 P2 P3, 就保证了表中的 常数 的因子排他性。
也可以 手推+程序显示 探究其规律。
#include<iostream>
using namespace std;
const int Size=100000;
long long num[Size];
int main()
{
long long p1, p2, p3, i;
while(cin>>p1>>p2>>p3>>i)
{
int k1, k2, k3;
k1=k2=k3=0;
num[0]=1;
for(int j=1; j<i+1; j++)
{
long long x1=num[k1]*p1;
long long x2=num[k2]*p2;
long long x3=num[k3]*p3;
long long Min=min(x1, x2);
Min=min(Min, x3);
num[j]=Min;
if(Min==x1) k1++;
if(Min==x2) k2++;
if(Min==x3) k3++;
// cout<<"_______________________"<<endl<<endl;
// cout<<"x1="<<x1<<endl;
// cout<<"x2="<<x2<<endl;
// cout<<"x3="<<x3<<endl;
// cout<<"Min="<<Min<<endl;
// cout<<"k1 k2 k3="<<k1<<" "<<k2<<" "<<k3<<endl;
// cout<<"_______________________"<<endl<<endl;
}
cout<<num[i]<<endl;
}
}

浙公网安备 33010602011771号