2017.07.13 一点训练部分。

https://vjudge.net/contest/170300#problem/G
这个地方学的是 便输入边处理,,
而且题意自己没看懂

https://vjudge.net/contest/170300#problem/F

这个地方的思路很好,, 就是每个层级的长度减去。。

http://codeforces.com/contest/831/problem/C
这个地方原来只需要sort一下之后就很好解决了。不过要注意用 set是为了去重

http://codeforces.com/contest/831/problem/B
看到别人的这个的代码挺好的

char tr[500];
int main(){
    string s1,s2,s3;
    for(int i=0;i<=300;++i)tr[i]=i;
    cin>>s1>>s2>>s3;
    for(int i=0;i<=25;++i)tr[s1[i]]=s2[i],tr[s1[i]-32]=s2[i]-32;
    rep(i,0,s3.length()){
        cout<<tr[s3[i]];
    }puts("");
}

https://vjudge.net/contest/170300#problem/I
挺好的题目,题解说是dfs ,看了挺久,大概懂了意思。。//其实这里deep应该是个数的意思把。。。

int st[maxn];
int cnt=0;
bool dfs(int n,int start,int deep){
    if(n<0)return 0;
    if(deep==0){
        if(n==0){
                pf("%d\n",cnt);
            rep(i,1,cnt){
                pf("%d%c",st[i],i==cnt?'\n':' ');
            }
            return 1;
        }
        return 0;
    }
    for(int i=start;i>=1;i--){
        if(i*i*i*deep<n)break;
        st[++cnt]=i;
        if(dfs(n-i*i*i,i,deep-1))return 1;
        --cnt;
    }
    return 0;
}
int main(){
    int n;
    while(~sf("%d",&n)){
            cnt=0;
        for(int i=1;i<=n;++i){
            if(dfs(n,365,i))break;
        }

    }
}

个人感觉另一种写法更好看。。

int a[1000];
int tmp[1000];
int ans=0;
void dfs(int now,int n,int mx){
    if(n==0){
        if(now<ans){
            ans=now;
            for(int i=0;i<ans;++i){
                a[i]=tmp[i];
            }
        }
    }
    if(now+1>=ans)return;//说这个简直很减去时间
    for(int i=mx;i>=1;i--){
        if(i*i*i>n)continue;
        if(now+n/(i*i*i)>=ans)return;
        tmp[now]=i;
        dfs(now+1,n-i*i*i,i);
        if(n==i*i*i)return;
    }
}
int main(){
    int n;
    while(~sf("%d",&n)){
        ans=inf;
        dfs(0,n,365);
        pf("%d\n",ans);
        rep(i,0,ans-1)pf("%d ",a[i]);
        puts("");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值