「オイラープロジェクト61~70」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> int memo[10000]={0}; int ans[6]; void saiki(int num,int perm,int deep,int ss){ if(deep==6){ int sum=0; if(num==ss&&perm==63){ for(int i=0;i<6;i++){ printf("%d ",ans[i]); sum+=ans[i]; } printf(" %d\n",sum); } }else{ int next; for(int i=0;i<100;i++){ next=num+i; int p=memo[next]; for(int k=1;k<=32;k*=2){ if(((p&k)!=0)&&((perm&k)==0)){ ans[deep]=next; saiki(i*100,perm|k,deep+1,ss); } } } } } int up=10000; int main(){ int m; for(int n=1;n<=up;n++){ m=(n*(n+1))/2; if(m<up&&m>999)memo[m]|=1; m=n*n; if(m<up&&m>999)memo[m]|=2; m=(n*(3*n-1))/2; if(m<up&&m>999)memo[m]|=4; m=n*(2*n-1); if(m<up&&m>999)memo[m]|=8; m=(n*(5*n-3))/2; if(m<up&&m>999)memo[m]|=16; m=(n*(3*n-2)); if(m<up&&m>999)memo[m]|=32; } for(int i=10;i<100;i++){ saiki(i*100,0,0,i*100); } }
#include<stdio.h> #include<algorithm> #include<string.h> int main(){ int memo[2][101],a,now,next; sizeof(memo,0,sizeof(memo)); scanf("%d",&memo[0][0]); for(int i=1;i<100;i++){ now =(i+1)%2; next=i%2; for(int j=0;j<=i;j++){ scanf("%d",&a); if(j==i){ memo[next][j]=memo[now][j-1]+a; }else if(j>0&&j<i){ memo[next][j]=std::max(memo[now][j-1],memo[now][j])+a; }else{ memo[next][j]=memo[now][j]+a; } } } int ans=0; for(int i=0;i<100;i++)ans=std::max(ans,memo[next][i]); printf("%d\n",ans); }
#include<stdio.h> #include<math> int main(){ int ans=1;//1を最初に足す for(int i=2;i<10;i++){ //10以上は桁数の増加より数字の増加が早いので無視 double d=log(i)/log(10); printf("%lf\n",1/(1-d)); ans+=(int)(1/(1-d)); } printf("%d\n",ans); }