这场的前两题异乎寻常的简单啊,怪不得是.5了呢
250pt: 大水题。。。
500pt:
算出来总的平面图构成的方案数不会太多,所以暴力背包吧,常数很小,放心跑吧。。。
bool vis[1000010];
int num[2012];
int dp[50010];
int PlanarGraphShop::bestCount(int N) {
for(int i = 1; i <= 37; i++) {
int lim;
if(i <= 2) lim = i-1;
else lim = 3*(i-3) + 3;
for(int j = 0; j <= lim; j++) {
vis[i*i*i+j*j] = true;
}
}
int tot = 0;
for(int i = 1; i <= N; i++) if(vis[i]) {
num[tot++] = i;
}
for(int i = 1; i <= N; i++) dp[i] = N;
dp[0] = 0;
for(int i = 0; i <= N; i++) {
for(int j = 0; j < tot; j++) if(i >= num[j]){
if(dp[i-num[j]] + 1 < dp[i]) {
dp[i] = dp[i-num[j]] + 1;
}
}
}
return dp[N];
}