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

NOIP2001普及组解题报告

时间:2017-09-04 22:45:06      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:play   strlen   技术分享   lap   one   noip   ++i   out   none   

数的计算

分析:递归即可。不用学他造数。

技术分享
#include<iostream>
#include<algorithm>
using namespace std;
int f(int n){
    int ret=1;
    for(int i=1;i<=n/2;++i){
        ret+=f(i);
    }
    return ret;
}
int main(){
    int n;
    cin>>n;
    cout<<f(n);
    return 0;
}
View Code

求先序排列

分析:将中序排列分为l到r,后序找l到r子树的根,再递归往下算即可。

技术分享
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=15;
char a[maxn],b[maxn];
int len;
void dfs(int l,int r){
    if(l>r)return ;
    for(int i=len-1;i>=0;--i){
        for(int j=l;j<=r;++j){
            if(b[i]==a[j]){
                cout<<b[i];
                dfs(l,j-1);
                dfs(j+1,r);
                return ;
            }
        }
    }
}
int main(){
    cin>>a>>b;
    len=strlen(a);
    dfs(0,len-1);
    return 0;
}
View Code

装箱问题

分析:裸背包。f[i]=max(f[i],f[i-a[j]]);

技术分享
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=40,maxm=20010;
int a[maxn];
bool f[maxm];
int main(){
    int v,n;
    cin>>v>>n;
    f[0]=1;
    for(int i=1;i<=n;++i)cin>>a[i];
    for(int i=1;i<=n;++i){
        for(int j=v;j>=a[i];--j){
            if(f[j-a[i]])
            f[j]=1;
        }
    }
    int ans=-1;
    for(int i=v;i>=0;--i){
        if(f[i]){
            ans=i;
            break;
        }
    }
    cout<<v-ans;
    return 0;
}
View Code

总结:水的不要不要的。

NOIP2001普及组解题报告

标签:play   strlen   技术分享   lap   one   noip   ++i   out   none   

原文地址:http://www.cnblogs.com/lqs6/p/7475889.html

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