NOIP2005年普及组题解

这是第一题https://www.luogu.org/problemnew/show/P1046
这道题嘛,陶陶能够到的高度是固定的,所以可以枚举每个苹果,与陶陶能够到的高度比较,然后再把计数器加1就行了。

#include
#include
using namespace std;
int a[15],hei,ans;

int main()
{
    freopen("apple.in","r",stdin);
    freopen("apple.out","w",stdout);
    for(int i=1; i<=10; i++)
        cin>>a[i];
    cin>>hei;
    hei+=30;//滔滔能摸到的最高的位置 
    for(int i=1;i<=10;i++)
        if(a[i]<=hei)
            ans++;//如果能摸到,那么ans+1 
    cout<return 0;
}

这是第二题:https://www.luogu.org/problemnew/show/P1047

这道题,用的是一个简简单单的线段树,也就没有其他的考点了。

#include
#include
using namespace std;
int len,n,a[40100];

void insert(int x,int l,int r,int left,int right)
{
    if(a[x]==r-l+1)
        return;
    if(l==left&&r==right){
        a[x]=r-l+1;
        return;
    }
    int m=(l+r)/2;
    if(right<=m)
        insert(x+x,l,m,left,right);
    else if(left>m)
        insert(x+x+1,m+1,r,left,right);
    else{
        insert(x+x,l,m,left,m);
        insert(x+x+1,m+1,r,m+1,right);
    }
    a[x]=a[x+x]+a[x+x+1];//把两边的值加起来就好了~~~
}

int main()
{
    freopen("tree.in","r",stdin);
    freopen("tree.out","w",stdout);
    cin>>len>>n;
    for(int i=1;i<=n;++i){
        int x,y;
        cin>>x>>y;
        insert(1,0,len,x,y);
    }
    cout<1-a[1]<return 0;
}

这里是第三题:https://www.luogu.org/problemnew/show/P1048
这道题,好像就是一道简单的背包问题吧~
二话不说,直接上我的代码
~

#include
#include 
using namespace std;
int T,M,f[200][1100],t[200],m[200];

void prepare()
{
    for(int j=1;j<=T;++j){
        if(j1]) f[1][j]=0;
        else f[1][j]=m[1];
    }
    for(int i=2;i<=M;++i){
        for(int j=1;j<=T;++j){
            if(j>=t[i])
                f[i][j]=max(f[i-1][j],m[i]+f[i-1][j-t[i]]);
            else
                f[i][j]=f[i-1][j];
        }
    }
}

int main()
{
    freopen("medic.in","r",stdin);
    freopen("medic.out","w",stdout);
    cin>>T>>M;
    for(int i=1;i<=M;++i)
        cin>>t[i]>>m[i];
    prepare();
    cout<return 0;
}

至于第四题嘛,有点难度,我今后会专门写一篇博客的。

你可能感兴趣的:(C++,Junior,NOIP)