ACM day 5.0

OJ 419.
OJ 411.
OJ 410.
OJ 422.
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢

#include <bits/stdc++.h>
using namespace std;
int main()
{   int n,i,t,a[100];
while(scanf("%d",&n)!=-1)
{a[0]=1;
for(i=1;i<n;i++)
a[i]=2*a[i-1]+2;
printf("%d\n",a[n-1]);

    }

    return 0;

}

OJ 426.

#include <bits/stdc++.h>
using namespace std;
int main()
{string a;int n;
while(cin>>n)
{for(int i=1;i<=n;i++)
{int flag=0;
cin>>a;
int l=a.length();
for(int j=0;j<l;j++)
{if(a[j]>='0'&&a[j]<='9')
flag++;
}
cout<<flag<<endl;}
}
return 0;
}

OJ 430.

贪心算法

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,x,s;
    while(cin>>n&&n)
    {
        s=0;//n是教师个数
        for(int i=0;i<n;i++)
        {
            cin>>x;//x是这个教师工资
            if(x/100>0){s=s+x/100;x=x%100;}//s是纸币个数
            if(x/50>0){s=s+x/50;x=x%50;}
            if(x/10>0){s=s+x/10;x=x%10;}
            if(x/5>0){s=s+x/5;x=x%5;}
            if(x/2>0){s=s+x/2;x=x%2;}
            s=s+x;
        }
        printf("%d\n",s);
    }
    return 0;
}//贪心算法就是可着最大的先来

OJ 442.
OJ 448.

#include <stdio.h>

#include <stdlib.h>



int main()

{   int s1,s2,n,j,a,b,i,k;

    scanf("%d",&n);

    for(i=0;i<n;i++)

    {

        scanf("%d %d",&a,&b);

        s1=s2=0;

        for(k=1;k<a;k++)

        {

            if(a%k==0)

                s1+=k;

        }

        for(j=1;j<b;j++)

        {

            if(b%j==0)

                s2+=j;

        }

        if(s1==b&&s2==a)

            printf("YES\n");

        else

            printf("NO\n");

    }

    return 0;

}

OJ 452.

小老鼠走迷宫通解

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int a,b,n;
    ll way[60];
    way[1]=1;
    way[2]=2;
    for(int i=3;i<54;i++)
    {
        way[i]=way[i-1]+way[i-2];
    }
    cin>>n;
    while(n--)
    {
        cin>>a>>b;
        cout<<way[b-a]<<endl;
    }
    return 0;
}

OJ 523.

简单递推

牛顿的家里有三棵苹果树A,B,C,树上结满了无数个好苹果和毒苹果。牛顿站在一棵苹果树下,他能选择接这棵树掉下的苹果,也可以选择接右边树所掉落的苹果(每次牛顿只能选择接一棵树所掉落的苹果)。假设牛顿的背包无限大,能接很多的苹果,但是每只毒苹果和一只好苹果相遇就会令这2只苹果都从人间消失。
在每次整数秒的时刻,苹果开始掉落,每棵树每次只掉落同一类型的苹果(掉好苹果或掉毒苹果)。苹果掉落时可以几个苹果一块掉落,且毒苹果的数量远远少于好苹果的数量。
Input
输入数据有多组,每组第1行是n ,接下来有n行,每行4个数,为T,A,B,C,分别代表每次掉落的时间(秒),A,B,C三棵树掉落的苹果数(正数代表好苹果的数量,负数代表毒苹果的数量),这里T的范围( 1<=T<=20, 1<=A,B,C<=100)。输入数据已经按照时间从小到大排好序了,而且T是连续的。
Output
在一行内输出牛顿能接到的苹果的最大值。
Sample Input
4
1 1 4 2
2 0 5 0
3 2 3 4
4 6 1 2
5
1 -1 -2 9
2 11 0 7
3 6 5 2
4 -1 -2 3
5 2 4 -1
Sample Output
15
20

DP入门题。这题构造一个n行3列的二维矩阵a,每次输入的时间其实没用,因为数据保证时间连续并且递增。每次输入时间后,把第i次输入的第j个数保存到a[i][j]中,

之后把dp数组全部初始化为负值,然后再把dp数组的第一行初始化为a数组的值,从第二行从上往下递推,递推到最后一行,找到最后一行中dp数组的最大值即可。

本题为杭电hdu 1176 免费馅饼的简单版本,不过思路都差不多吧,都是简单的DP,递推一下就可以了。

#include <bits/stdc++.h>
using namespace std;
const int inf=-0x3f3f3f3f;
int n,t,mx,a[30][10],dp[30][10];
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n)
    {
        memset(a,0,sizeof(a));
        memset(dp,inf,sizeof(dp));
        for(int i=1;i<=n;i++)
            cin>>t>>a[i][1]>>a[i][2]>>a[i][3];
        mx=inf;
        for(int i=1;i<=3;i++)
            dp[1][i]=a[1][i];//先初始化第一行的dp数值
        for(int i=2;i<=n;i++)
            for(int j=1;j<=3;j++)
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
        for(int i=1;i<=3;i++)
            mx=max(mx,dp[n][i]);
        printf("%d\n",mx);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值