2008-12-25
SRM401 Div1 Easy: FIELDDiagrams
DP。単純な問題だが手間取っている。DPでいきなりコーディングは空中分解しがち。
#define all(c) (c).begin(),(c).end()
#define tr(c,i) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
#define rep(var,n) for(int var=0;var<(n);var++)
class FIELDDiagrams {
public:
int fo;
vector<long long> memo;
long long sub(int last,int fieldOrder){
int ceil = min(last,fieldOrder);
if (ceil == 0) { return 1;}
int key=(ceil<<5)|fieldOrder;
if (memo[key]>=0) return memo[key];
long long count=1LL;
for(int ai=ceil;ai>0;ai--){
count += sub(ai,fieldOrder-1);
}
return memo[key] = count;
}
long long countDiagrams(int fieldOrder) {
fo = fieldOrder;
memo.resize(1024); fill(all(memo),-1);
long long count = 0LL;
for (int a1=fieldOrder;a1>0;a1--) {
count += sub(a1, fieldOrder-1);
}
return count;
}
};
コメント
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/n4_t/20081225