2010年11月20日土曜日

TopCoder 練習 SumsOfPerfectPowers(SRM 350 Div1 Easy)

SumsOfPerfectPowers(SRM 350 Div1 Easy)

■問題
本家参照.

■解法
chokudaiさんのニコ生を追従して解いた.指数は2以上なので,amまたはbkの候補を先に作っておく.あとは2重ループで条件を満たす数のフラグを立てるだけ.

  1. import java.util.*;  
  2.   
  3. public class SumsOfPerfectPowers{  
  4.  public int howMany(int lowerBound, int upperBound){  
  5.   boolean[] dp=new boolean[upperBound+1];  
  6.   TreeSet<Integer> set=new TreeSet<Integer>();  
  7.   set.add(0);  
  8.   set.add(1);  
  9.   for(int a=2;a*a<=upperBound;a++){  
  10.    for(long r=a*a;r<=upperBound;r*=a){  
  11.     set.add((int)r);  
  12.    }  
  13.   }  
  14.   for(int a:set){  
  15.    for(int b:set){  
  16.     if(a+b<=upperBound){  
  17.      dp[a+b]=true;  
  18.     }  
  19.    }  
  20.   }  
  21.   int ret=0;  
  22.   for(int i=lowerBound;i<=upperBound;i++){  
  23.    if(dp[i]){  
  24.     ret++;  
  25.    }  
  26.   }  
  27.   return ret;  
  28.  }  
  29. }  

0 件のコメント: