1、Aizu ALDS1_5_A Exhaustive Search
#include<iostream>
using namespace std;
int a[30],n,m;
bool judge(int now,int val){
if(val==0) return true;
if(now==0){
if(val==a[now])
return true;
return false;
}
if(judge(now-1,val)) return true;
if(judge(now-1,val-a[now]))return true;
return false;
}
int main ()
{
int val;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>m;
for(int i=0;i<m;i++){
cin>>val;
if(judge(n,val))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
2、Aizu ALDS1_5_C Koch Curve
(里面用到 某一点绕另一点逆时针旋转后的坐标公式,如下图)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
struct point{
double x,y;
};
void print(point a){
printf("%.8f %.8f\n",a.x,a.y);
}
void Koch(int cnt,point a,point b)
{
if(cnt==0) return ;
point d1,d2,mid;
d1.x=a.x+(b.x-a.x)/3;
d1.y=a.y+(b.y-a.y)/3;
d2.x=a.x+2*(b.x-a.x)/3;
d2.y=a.y+2*(b.y-a.y)/3;
mid.x=d1.x+(d2.x-d1.x)*(cos(M_PI*60/180))-(d2.y-d1.y)*(sin(M_PI*60/180));
mid.y=d1.y+(d2.x-d1.x)*(sin(M_PI*60/180))+(d2.y-d1.y)*(cos(M_PI*60/180));
Koch(cnt-1,a,d1);
print(d1);
Koch(cnt-1,d1,mid);
print(mid);
Koch(cnt-1,mid,d2);
print(d2);
Koch(cnt-1,d2,b);
return ;
}
int main ()
{
int n;
cin>>n;
point a,b;
a.x=0,a.y=0;
b.x=100,b.y=0;
print(a);
Koch(n,a,b);
print(b);
return 0;
}