码迷,mamicode.com
首页 > 其他好文 > 详细

mission3--dp

时间:2019-10-19 00:17:33      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:ios   题目   names   pac   turn   cow   lin   void   cst   

A---母牛的故事

题目大意:第一年有一头母牛,每年年初母牛生小母牛,小母牛第四个年头可以开始生小牛。

问第n年有多少头牛。

题解:

(1)列出前几项来找规律(2)第i年牛的数量=第i-1年牛的数量+(新出生的牛的数量=第i-3年牛的数量)

代码:

#include<iostream>
#include<cstdio> 
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int n;

int dp[60];

int main()
{
    dp[1]=1;dp[2]=2;dp[3]=3;dp[4]=4;
    for(int i=5;i<=60;i++) dp[i]=dp[i-1]+dp[i-3];
    while(scanf("%d",&n)&&n) cout<<dp[n]<<endl;
    return 0;
} 

B---Cow Bowling

 

           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<algorithm>
using namespace std;

int n;

int ans;

int a[360][360];

int f[360][360];

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    f[1][1]=a[1][1];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
        }
    }
    for(int i=1;i<=n;i++)ans=max(ans,f[n][i]);
    cout<<ans<<endl;
    return 0;
} 

C---Sumsets

题目大意:

一个数分成几个2的x次方的和的方案数

如:

 

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)打表找规律 找出递推式

a、如果i是奇数,那么a[i]=a[i-1];在i-1的数的方法数+1

b、如果i是偶数,那么a[i]=a[i-1]+a[i/2];

如果i是偶数 在i-1的数+1 i/2的方案数里都*2;

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define M 1000000
using namespace std;


int n,p;

int ans;

int b[100];

void dfs(int x,int now,int sum)
{
    if(sum>now) return ;
    if(sum==now)
    {
        ans++;
        return;
    } 
    for(int i=x;i>=0;i--) //i>=0不是i 
    {
        dfs(i,now,sum+b[i]);
    }
} 
int main()
{
    b[0]=1;
    for(int i=1;i;i++)
    {
        b[i]=b[i-1]*2;
        if(b[i]>M)
        {
            p=i;break;
        } 
    }
    for(int i=1;i<=20;i++) 
    {
        ans=0;
        dfs(p,i,0);
        cout<<ans<<endl;
    }
    return 0;
} 

 

#include<iostream>
#include<cstdio> 
#include<cstring>
#include<algorithm>
#define M 1000000000
using namespace std;

int n;

int a[1000001];

int main()
{
    scanf("%d",&n);
    a[1]=1;a[2]=2;a[3]=2;a[4]=4;
    for(int i=5;i<=n;i++) 
    {
        if(i%2) a[i]=a[i-1]%M;
        else a[i]=(a[i-2]+a[i/2])%M;
    }
    cout<<a[n];
    return 0;
} 

 

mission3--dp

标签:ios   题目   names   pac   turn   cow   lin   void   cst   

原文地址:https://www.cnblogs.com/zzyh/p/11701267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!