首页 > 代码库 > noip2008T2 火柴棒等式

noip2008T2 火柴棒等式

只会做这种弱智的水题了怎么办。。

范围太小枚举便可

若范围n<=100?或更大?

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cstdlib>using namespace std;int n;int pd[10000]; int a[10]={6,2,5,5,4,5,6,3,7,6};int b[4][6];int fj(int t,int w){    int ws=0;    if (t==0)      return 1;    while (t)    {        b[w][++ws]=t%10;        t/=10;    }    return ws;}int main(){    cin>>n;    int ans=0;    n-=4;    for (int i=0;i<=2500;i++)      for (int j=0;j<=2500;j++)      {          if (i==j&&pd[i])            continue;          if (i==j)          pd[i]=1;           memset(b,0,sizeof(b));        int ws1=fj(i,1);          int ws2=fj(j,2);          int ws3=fj(i+j,3);          int sum=0;          for (int k=1;k<=ws1;k++)            sum+=a[b[1][k]];          for (int k=1;k<=ws2;k++)          sum+=a[b[2][k]];        for (int k=1;k<=ws3;k++)          sum+=a[b[3][k]];        if (sum==n)          ans++;        }    cout<<ans;} 

枚举a和b&a+b

 

似乎也可以先处理n-4根火柴能组成的数字,再枚举插入符号的位置

 

noip2008T2 火柴棒等式