nikeeshi のコーディング記

コーディングの成果をはっつけるとこ。このブログにあるソースコードはNYSL Version 0.9982に従い公開します(2014/06/18)。

SRM 585 Div1

初のDiv1。

250

拍子抜けのEasy。まさにEasy。画像が読み込めなかった。

class TrafficCongestion{
public:
   int theMinCars(int treeHeight){
      long long ans=1;
      for(int i=0;i<treeHeight;i++){
         if(i%2==0)ans=ans*2-1;
         else ans=ans*2+1;
         ans%=1000000007;
      }
      return (int)ans;
   }
};

500

初Div1の500。手応え的にはDiv2の500と1000の中間くらい。セグメンテーションフォールト。 考えた方法は、dp。 順に数字の種類を増やしていく。増やす場所によってLISが変化するので、頑張ってDP。 頑張れなかった。

以下頑張れなかったコード。(実行してもセグフォ)

#include <vector>
using namespace std;
long long dp[1300][40];
const long long MOD=1000000007;
long long combi(long long a,long long b){
   if(a<b)return 0;
   long long ans=1;
   for(int i=0;i<a-b;i++){
      ans*=a-i;
      ans/=i+1;
   }
   return ans;
}
long long homopro(long long a,long long b){
   return combi(a+b-1,b);
}
class LISNumber{
public:
   int count(vector <int> cardsnum, int K){
      long long l=cardsnum[0];
      dp[cardsnum[0] ][0]=1;
      for(int i=1;i<cardsnum.size();i++){
         l+=cardsnum[i];
         for(int k=0;k<1297;k++){
            int h=cardsnum[i];
            for(int s=0;s<=h;s++){
               int r=h-s;
               dp[k+s][i]+=dp[k][i-1]*combi(k,r)*homopro(l-k+r,s)%MOD;
               dp[k+s][i]%=MOD;
            }
         }
      }
      return dp[K][cardsnum.size()-1];
   }
};