2011-11-01から1ヶ月間の記事一覧
ShippingCubes #include <algorithm> using namespace std; class ShippingCubes{public: int minimalCost( int N ) { int ans = N+2; for ( int x=1; x<=N; x++ ) for ( int y=1; y<=N; y++ ) for ( int z=1; z<=N; z++ ) if ( x*y*z==N ) ans = min( ans, x+y+z ); re</algorithm>…
LongestSequenceCの要素数が2の場合が↓に載っていた。数列の長さが絶対値の和を超えることは無いらしい。Solution for October 2008 - Math Central長さnの数列vを考える。Si = Σj=0i-1v[i]とすると、長さkの全ての連続した部分列の和が正であることと、Si<Si+kが全てのiについて成り立つことは同値。Sの大小関係が決まるので、それをグラフの有向辺として、グラフが閉路を持たなければそのような数列Sが作れる。閉路があればSは作れない。順番に調べていっても間に合ったけど、二分探索の方が安全。 #include <vector> u</si+kが全てのiについて成り立つことは同値。sの大小関係が決まるので、それをグラフの有向辺として、グラフが閉路を持たなければそのような数列sが作れる。閉路があればsは作れない。順番に調べていっても間に合ったけど、二分探索の方が安全。>…
MagicDiamondsn=1ならば1回、n=2ならば2回、n=3ならば3回。nが4以上の素数ならばn-1は必ず合成数になるので、2回。 class MagicDiamonds{public: long long minimalTransfer( long long n ) { if ( n<=3 ) return n; for ( long long i=2; i*i<=n; i++ ) if …
Easy (250) 238.90 Medium (500) 190.54 Hard (900) 0 Challenge 0 結果 48位 1962→20642000点台復帰&自己ベスト更新(`・ω・´)
SmallBricks31動的計画法。下から順にブロックを積んでいき、現在のx,y座標と上に出ているブロックの配置ごとにパターン数を覚えておく。 #include <vector> using namespace std; int M = 1000000007; int w, h; vector<int> B; vector<vector<vector<int> > > memo; int BT( int x, int y )</vector<vector<int></int></vector>…
AlphabetPath #include <string> #include <vector> using namespace std; class AlphabetPath{public: string doesItExist( vector <string> letterMaze ) { int w = (int)letterMaze[0].size(); int h = (int)letterMaze.size(); int c = 0; for ( int y=0; y</string></vector></string>
BricksN動的計画法。幅iのブロックの上に高さが高々jになるようにブロックを積む場合の数を覚えておく。全くブロックを積まない場合が1通り。あとは最左のブロックの固まりを置く場所ごとに、ブロックの固まりの作り方×上の積み上げ方×1つ隙間を空けて右の…
CountingSeries等比数列は数が少ないので、等差数列の個数をまず求め、等差数列に含まれない等比数列の要素の個数を加える。 d==1は別扱いしないと処理が終わらないとか、upperBound
Easy (250) 224.93 Medium (500) 270.51 Hard (900) 0 Challenge 0 結果 109位 1898→1962また2000点台が見えてきた(`・ω・´)