2009 Multi-University Training Contest 10 - Host by NIT

三人组11.17训练赛
这里写图片描述

感觉这场似乎做崩了。。。

这里写图片描述

A hdu 2891
一开始,一直在往dp上想, 但其实应该醒悟过来的,因为我没有办法吧n*n的效率优化到 nlogn 或者 N,但是可能是经验太少了,一直到最后我才醒悟了,但是太晚了。

其实这题和北邮校赛的那道题不是一模一样的吗???
仔细想想,就是一样的解法啊。还是那种最简单的二分答案即可。 我们只需要二分最低血量,判断能够维持该血量就可以了。 判断On,扫一遍 ,然后我用一种很奇怪的jud AC了:先跑一遍完全背包,然后用来判断可行性
但是我觉得这种方法肯定是有问题的。。。 难道是数据太水了??

void beibao(){
    memset(value,0,sizeof(value));
    for(int i=1;i<=m;i++){
        for(int j=f[i].time;j<=n;j++){
            value[j]=max( value[j-f[i].time]+f[i].add , value[j]);
        }
    }
}
int sum[N];
int jud(int h){
    int rest=hp;
    int pre=0;
    for(int i=1;i<=n;i++){
        sum[i]=a[i]+sum[i-1];
//        printf("i=%d r-a=%d\n",i,rest);
        rest=hp-sum[i];
        if(rest<h){ //当前血量小于h
            rest=hp-sum[i-1]+value[i-1];
            if(rest>hp) rest=hp;
            rest-=a[i];
            if(rest<h){
                return 0;
            }
        }
    }
    return 1;
}

D 欧拉回路
一开始看错题了。。。 题意是要求扇形面中绝缘面与导电面的分布情况,然后给定k是接电的数量。然后求出字典序最小的序列,循环一圈正好0~2^k 都出现一遍,且只出现一遍。 其实这不就是欧拉图么,以前学图的时候学到这个地方就停了下来,所以这方面确实是有所欠缺,还不是很清楚,真好趁着这个机会补一补。另开一篇吧。 这边就只贴个代码了4

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
int vis[2500];
int a[2500];
int n;
int aim;
int l;
void dfs(int x)
{
    int y=x&((1<<(n-1))-1);  // x & 1111..1 (长度为n-1),=取后n-1位数字
    y=y*2;       //左移一位,长度变为 n
    if(vis[y]==0)
    {
        vis[y]=1;
        dfs(y);
//      a[l++]=0;    如果我们放在前面,做前序遍历,会发现这样是错误的,因为他不管后面出现的数字
        a[l++]=0;  //因为回溯,所以第一个数字反而存在最后
    }
    if(vis[y+1]==0)   //末尾为1
    {
        vis[y+1]=1;
        dfs(y+1);
        a[l++]=1;
    }
}
/*
 l=        7 6 5 4 3 2 1 0
 y=        0 1 2 5 3 7 6 4
 0 0(n-1)  0 1 0 1 1 1 0 0

 这就是样例的dfs序,可以发现由于是一条回路,所以最后两个0 实际上就是前两个0
 */
int main() {
    //freopen("1.txt","r",stdin);
    while(scanf("%d",&n)!=EOF)
    {
        l=0;

        memset(vis,0,sizeof(vis));
        printf("%d ",1<<n);
        dfs(0);

        for(int i=0;i<n-1;i++)
            printf("%d",a[i]);
        for(int i=l-1;i>=n-1;i--) //
        {
            printf("%d",a[i]);
        }
        printf("\n");
    }
    return 0;
}

E sb题
居然连copy 用都不要用都可以过,我还立了个flag。。。

F ac自动机模板题

G 简单bash博弈,但是要打出表来找规律,否则会超时

然后还有一大堆计算几何搞不了啊

当下很犹豫。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值