牛の物語---
効果の件名:最初の年の牛があり、各年の初め牛生まれた牛は、牛がカルヴェ四年を開始することができます。
Q.牛年nのどのように多くの頭。
ソリューション:
(1)法は前にいくつかのリストを来た私の数(2)= I-ウシ1年牛的数量+(新生まれた牛の数= I-3年牛的数量)
コード:
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <cmath> の#include <アルゴリズム> 使用して 名前空間STDを、 int型のn; int型の DP [ 60 ]。 INT メイン() { DPは[ 1 ] = 1 ; DPは[ 2 ] = 2 ; DP [ 3 ] = 3 ; DP [ 4 ] = 4 。 用(int型 I = 5 ; iが= < 60 DP [I] = DP [1-; I ++)は1 [] + DP I-3 ]。 一方、(scanf関数(" %のD "、&N)&& N)COUT << DP [N] << ENDL。 リターン 0 ; }
B ---牛のボウリング
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
デジタルピラミッド だけに下るからは、最後の層の最大値を求めて行きます
ダイから下方に押されていないN <= 350の検索
コード:
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <cmath> の#include <アルゴリズム> 使用して 名前空間STDを、 int型のn; int型ANS; INT [ 360 ] [ 360 ]。 INT [F 360 ] [ 360 ]。 INT メイン() { scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iは++; iが= N < ) { ため(INTJ = 1 ; J <= I; J ++ ) { scanf関数(" %のD "、および[I] [J])。 } } [F 1 ] [ 1 ] = [ 1 ] [ 1 ]。 以下のために(int型 i = 1 ; iは++; iが<= N ) { ため(int型の J = 1 ; J <= I; J ++ ) { F [I] [J] = MAX([I-F 1 ] [j]は、 F [I- 1 ] [J- 1 ])+ [I] [J]。 } } のために(int型 I = 1 ANS = iは++; iがn = <)MAX(ANS、F [n]は[I])。 coutの << ANS << てendl; リターン 0 ; }
C --- Sumsets
効果の件名:
X 2の電源の数にプログラム番号と番号の
以下のような:
1)1 + 1 + 1 + 1 + 1 + 1 + 1
2)1 + 1 + 1 + 1 + 1 + 2
3)1 + 1 + 1 + 2 + 2
4)1 + 1 + 1 + 4
5)1 + 2 + 2 + 2
6)1 + 2 + 4
ソリューション:
(1)暴力
(2)再帰を見つけるために法律を見つけるためにテーブルをヒット
、iが奇数である場合、[i]は[I-1] = I-1 + 1の方法の数で
Bは、iが偶数であれば、[I] [I-1]を= + [I / 2]。
番号iは、スキームの偶数である場合は、I-1 +1 I / 2 * 2のです。
#include <iostreamの> する#include <cstdioを> する#include <cmath> の#include <アルゴリズム> の#define M 1000000 使用して 名前空間STD。 int型N、P。 int型ANS; int型 B [ 100 ]。 ボイド DFS(int型のx、int型今、int型の合計) { 場合(和> NOW)のリターン; もし(合計== 今) { ANS ++ 。 返します。 } のための(INTI = xで; I> = 0 ; i--)// I> = 0不是I { DFS(I、今、和 + B [I])。 } } INT (メイン) { B [ 0 ] = 1 。 以下のために(int型 I = 1 ; I; iは++ ) { B [I] = bの[I- 1 ] * 2 。 もし(B [I]> M) { P = I。破ります; } } のための(INT I = 1;私は= < 20 ; iは++ ) { ANS = 0 。 DFS(P、I、0 ); coutの << ANS << てendl; } 戻り 0 。 }
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> の#define M 1000000000 使用 名前空間STD。 int型のn; INT [ 1000001 ]。 INT メイン() { scanf関数(" %のD "、&N) [ 1 ] = 1 ; [ 2 ] = 2 ; [ 3 ] = 2 ; [ 4 ] = 4 。 以下のための(int型 I = 5;私は++; iが<= N ) { 場合、I%(2 [I] [I-=)1 ]%のMを、 他 [I] =([I- 2 ] + [I / 2 ])%のM。 } COUT << [N]。 リターン 0 ; }