SRM 555 DIV1 Easy - CuttingBitString

問題


http://community.topcoder.com/stat?c=problem_statement&pm=12155&rd=15177

解き方


dpで解く。nは50なので整数の最大は2^50=10^15程度なのでlong longで
表すことができる。

コード


class CuttingBitString {

public:

bool ispossible(string s){
if(s[0]=='0')return false;

int n=s.size();
long long ret=0,p=1;
for(int i=n-1;i>=0;i--){
ret+=(s[i]-'0')*p;
p*=2;
}

if(ret==0)return false;
while(ret%5==0 && ret>0)ret/=5;

return ret==1;
}

int getmin(string S) {
int n=S.size();
int dp[n+1];

FORE(i,0,n+1)dp[i]=1e+9;
dp[0]=0;

for(int i=0;i<=n;i++){
for(int j=0;j<=i;j++)if(dp[j]!=1e+9){
if(ispossible(S.substr(j,i-j+1))){
dp[i+1]=min(dp[i+1],dp[j]+1);
}
}
}

return dp[n]==1e+9 ? -1 : dp[n];
}

};

Share this

Related Posts

Previous
Next Post »