模板集(。

维蒂斯保佑。

全排列:

#include<iostream>
#include<string.h>
using namespace std;

int n,a[11];
bool b[11];

int s(int k);
int p();
int s(int k)
{
    int i;
    for(i=1;i<=n;++i)
    {
        if(b[i])
        {
            a[k]=i;
            b[i]=false;
            if(k==n) p();
            else s(k+1);
            b[i]=true;
        }
    }
}
int p()
{
    for(int i=1;i<n;++i)cout<<a[i]<<" ";
    cout<<a[n]<<endl;
}
int main()
{
    memset(b,true,sizeof(b));
    cin>>n;
    s(1);
    return 0;
}

组合:

#include<iostream>
using namespace std;

int n,r,a[101];
bool b[101]={0};

int s(int k);
int p();
int s(int k)
{
    int i;
    for(i=a[k-1]+1;i<=n;++i)
    {
        if(!b[i])
        {
            a[k]=i;
            b[i]=1;
            if(k==r)p();
            else s(k+1);
            b[i]=0;
        }
    }
}
int p()
{
//  for(int i=1;i<r;++i)cout<<a[i]<<" ";
//  cout<<a[r]<<endl;
}
int main()
{
    cin>>n>>r;
    s(1);
    return 0;
}

01背包:

#include<iostream>
#include<cstring>
using namespace std;
int p[1000],t[1000],f[10000];
int main()
{
    int v,n;
    cin>>v>>n;
    for(int i=0;i<n;++i)
        cin>>t[i]>>p[i];
    memset(f,-1,sizeof(f));
    f[0]=0;
    for(int i=0;i<n;++i)
        for(int j=v;j>=t[i];--j)
            f[j]=f[j]>f[j-t[i]]+p[i]?f[j]:f[j-t[i]]+p[i];
    cout<<f[v];
    return 0;
}

完全背包:

#include<iostream>
#include<cstring>
using namespace std;
int p[1000],t[1000],f[10000];
int main()
{
    int v,n;
    cin>>v>>n;
    for(int i=0;i<n;++i)
        cin>>t[i]>>p[i];
    memset(f,-1,sizeof(f));
    f[0]=0;
    for(int i=0;i<n;++i)
        for(int j=t[i];j<=v;++j)
            f[j]=f[j]>f[j-t[i]]+p[i]?f[j]:f[j-t[i]]+p[i];
    cout<<f[v];
    return 0;
}

无价值的01背包:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int a[35],v,n;
    bool f[21000];
    cin>>v>>n;
    for(int i=0;i<n;++i)
        cin>>a[i];
    memset(f,false,sizeof(f));
    f[0]=true;
    for(int i=0;i<n;++i)
        for(int j=v;j>=a[i];--j)
            if(f[j]==false)
                f[j]=f[j-a[i]];
    int x=v;
    while(f[x]==false)
        --x;
    cout<<v-x;
    return 0;
}

网络流(Dinic):

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

int _(int a,int b)
{
    return a>b?b:a;
}

struct nod
{
    int x,y,c,pre,ver;
}w[2000000];
int k,las[100000],st,ed;

void ins(int x,int y,int c)
{
    int k1=++k;
        w[k].x=x;
            w[k].y=y;
                w[k].c=c;
            w[k].pre=las[x];
        las[x]=k;
    int k2=++k;
        w[k].x=y;
            w[k].y=x;
                w[k].c=0;
            w[k].pre=las[y];
        las[y]=k;
    w[k1].ver=k2;
    w[k2].ver=k1;
}

int h[100000];
bool hier()
{
    memset(h,0,sizeof(h));
    h[st]=1;
    queue<int> q;
    q.push(st);
    while(!q.empty())
    {
        int x=q.front();
        for(int i=las[x];i>-1;i=w[i].pre)
        {
            int y=w[i].y;
            if(w[i].c&&h[y]==0)
            {
                h[y]=h[x]+1;
                q.push(y);
            }
        }
        q.pop();
    }
    if(h[ed])return true;
    else return false;
}

int fluis(int x,int f)
{
    if(x==ed)return f;
    int a=0,t;
    for(int i=las[x];i>-1;i=w[i].pre)
    {
        int y=w[i].y;
        if(w[i].c&&h[y]==h[x]+1&&a<f)
        {
            a+=(t=fluis(y,_(w[i].c,f-a)));
            w[i].c-=t;
            w[w[i].ver].c+=t;
        }
    }
    if(a==0)h[x]=0;
    return a;
}

int main()
{
    int m,n;
    cin>>m>>n;
    st=1;
    ed=n;
    k=0;
    memset(las,-1,sizeof(las));
    for(int i=0;i<m;++i)
    {
        int x,y,c;
        cin>>x>>y>>c;
        ins(x,y,c);
    }
    int s=0;
    while(hier())
        s+=fluis(st,99999999);
    cout<<s;
    return 0;
}

线段树:

#include<iostream>
using namespace std;

int tree[210000]={0},left_[210000],right_[210000],unit[110000];
/*
    tree  : 二叉树                     (key->value)
    left_ : 每节点对应的左区间       (key->unit)
    right_: 每节点对应的右区间       (key->unit)
    unit  : 每个单位区间对应的节点     (unit->key)
*/

int create(int l,int r,int k)
{
    left_[k]=l;
    right_[k]=r;
    if(l==r)unit[l]=k;
    else
    {
        create(l,(l+r)/2,2*k);
        create((l+r)/2+1,r,2*k+1);
    }
}

int add(int k,int a)
{
    int i=unit[k];
    while(i!=0)
    {
        tree[i]+=a;
        i/=2;
    }
}

int query(int l,int r)
{
    int p=unit[l],ans=0;
    while(!(right_[p]>r)&&right_[p]>0)
    {
        if(left_[p/2]<l||right_[p/2]>r)
        {
            ans+=tree[p];
            p=unit[right_[p]+1];
            continue;
        }
        else p/=2;
    }
    return ans;
}

int main()
{
    int n;
    cin>>n;
    create(1,n,1);
    int w;
    cin>>w;
    for(int i=0;i<w;++i)
    {
        char c;
        int a,b;
        cin>>c>>a>>b;
        if(c==‘x‘)
            add(a,b);
        if(c==‘y‘)
            cout<<query(a,b)<<"\n";
    }
    return 0;
}

极值线段树(似乎有bug?):

#include<iostream>
using namespace std;

int tree[210000]={0},left_[210000],right_[210000],unit[110000];
/*
    tree  : 二叉树                     (key->value)
    left_ : 每节点对应的左区间       (key->unit)
    right_: 每节点对应的右区间       (key->unit)
    unit  : 每个单位区间对应的节点     (unit->key)
*/

int _(int a,int b)
{
    return a>b?a:b;
}

int create(int l,int r,int k)
{
//  cout<<k<<":["<<l<<","<<r<<")\n";
    left_[k]=l;
    right_[k]=r;
    if(l==r)unit[l]=k;
    else
    {
        create(l,(l+r)/2,2*k);
        create((l+r)/2+1,r,2*k+1);
    }
}

int change(int k,int a)
{
    int i=unit[k];
    tree[i]=a;
    i/=2;
    while(i!=0)
    {
//      cout<<i<<":["<<left_[i]<<","<<right_[i]<<") -> "<<tree[i]+a<<endl;
        tree[i]=_(tree[i*2],tree[i*2+1]);
        i/=2;
    }
}

int query(int l,int r)
{
    int p=unit[l],ans=tree[p];
    while(!(right_[p]>r)&&right_[p]>0)
    {
//      cout<<"at "<<p<<":["<<left_[p]<<","<<right_[p]<<")\n";
        if(left_[p/2]<l||right_[p/2]>r)
        {
//          cout<<"crest. value:"<<tree[p]<<endl;
            ans=_(ans,tree[p]);
            p=unit[right_[p]+1];
            continue;
        }
        else p/=2;
    }
//  cout<<"at "<<p<<":["<<left_[p]<<","<<right_[p]<<")\n";
    return ans;
}

int main()
{
    int n;
    cin>>n;
    create(1,n,1);
    int w;
    cin>>w;
    for(int i=0;i<w;++i)
    {
        char c;
        int a,b;
        cin>>c>>a>>b;
        if(c==‘x‘)
            change(a,b);
        if(c==‘y‘)
            cout<<query(a,b)<<"\n";
    }
    return 0;
}

并查集:

#include<iostream>
#include<cstdio>
using namespace std;

struct node
{
    int head;
    int next;
    int num;
    int last;
} ufs[5100];

int create(int a)
{
    ufs[a].head=a;
    ufs[a].next=-1;
    ufs[a].num=1;
    ufs[a].last=a;
}

int mergefore(int x,int y)
{
    ufs[ufs[x].last].next=y;
    ufs[x].last=ufs[y].last;
    ufs[x].num+=ufs[y].num;
    ufs[y].last=0;
    ufs[y].num=0;
    int a=y;
    while(a>-1)
    {
        ufs[a].head=x;
        a=ufs[a].next;
    }
}

int merge(int x,int y)
{
    x=ufs[x].head;
    y=ufs[y].head;
    if(ufs[x].num>ufs[y].num)
    {
        mergefore(x,y);
        return 0;
    }
    else mergefore(y,x);
    return 0;
}

int main()
{
    int n,m,p;
    cin>>n>>m>>p;
    for(int i=1;i<=n;++i)create(i);
    for(int i=0;i<m;++i)
    {
        int x,y;
        cin>>x>>y;
        if(ufs[x].head!=ufs[y].head)
            merge(x,y);
    }
    for(int i=0;i<p;++i)
    {
        int a,b;
        cin>>a>>b;
        if(ufs[a].head==ufs[b].head)cout<<"Yes\n";
        else cout<<"No\n";
    }
    return 0;
}

数论模板(待更新):

#define ______BEGIN______ using namespace std;
#define _______END_______ int main(){return 0;}

#include<cmath>
#include<algorithm>
#include<iostream>

//加了这一段是不是比较正式……
//这是一组关于数论的模板。没了。
//不要编译。不要编译。不要编译。 

______BEGIN______

//最大公约数。
int gcd(int a,int b)
{
    if(b) return gcd(b,a%b);
    return a;
}

//素数判断(。
bool isp(int a)
{
    if(!a||!(a-1))
        return false;
    for(int i=2;i<=sqrt(a);++i)
        if(a%i==0)
            return false;
    return true;
} 

_______END_______

字符串模板(待更新):

#define ______BEGIN______ using namespace std;
#define _______END_______ int main(){return 0;}

#include<string>
#include<algorithm>
#include<iostream>

//加了这一段是不是比较正式……
//这是一组关于字串处理的模板。没了。
//可能会涉及高精度。
//不要编译。不要编译。不要编译。 

______BEGIN______

//将整数转换为字串。
string ntos(int a)
{
    string s;
    s.resize(0);
    while(a)
    {
        int k=s.size();
        s.resize(k+1);
        s[k]=(char)(a%10+‘0‘);
        a/=10;
    }
    reverse(s.begin(),s.end());
    return s;
}

//将字符串转换为整数。
int ston(string s)
{
    int a=0;
    for(int i=0;i<s.size();++i)
        a=a*10+(s[i]-‘0‘);
    return a;
}

//快速读入(?
inline int qread()
{
    char c=getchar();
    int n=0,p=1;
    while(c<‘0‘||c>‘9‘)
    {
        if(c==‘-‘)
            p=-1;
        c=getchar();
    }
    while(c>=‘0‘&&c<=‘9‘)
    {
        n=n*10+c-‘0‘;
        c=getchar();
    }
    return n*p;
} 

//高精度比较(大于,自行修改)。
bool cmp(string a,string b)
{
    if(a.size()==b.size())
        return a>b;
    return a.size()>b.size();
} 

_______END_______

基本没了?

原文地址:https://www.cnblogs.com/V-Carlyle/p/9661396.html

时间: 2024-10-17 20:22:06

模板集(。的相关文章

最短路模板集.

最短路dijkstra算法 邻接矩阵模板 复杂度 V^2 #include <iostream> #include <cstring> #include <algorithm> const int INF=0x3f3f3f3f; const int MAXN=10000; int n,s; int dist[MAXN]; int cost[MAXN][MAXN]; bool vis[MAXN]; void dijkstra(int s) { memset(vis,0,s

工具集

好用的工具集 转:http://www.yimingzhi.com/2015/03/lao-yi-de-kai-fa-gong-ju-he-lei-ku-ji-2014-ban Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio下的,老版本可以根据名字自行查找安装. CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实

润乾集算报表应用开发之参数输入

参数对于报表的重要性不言自明,润乾集算报表支持两种参数输入方案,可以使用集算报表设计参数模板联合报表一同发布,还可以自定义参数输入后与报表结合.二者并没有显著的差异,前者在开发使用上更加方便快捷,而后者则在灵活性上更胜一筹,用户在使用集算报表参数输入时可以根据实际需要进行选择. 下面就上述两种参数输入方式的使用分别来看一下. 使用参数输入模板 集算报表提供了"参数模板"的报表类型,使用参数模板可以制作参数输入表单,而且其内置了多种编辑风格,如下拉树.下拉日历.列表框.下拉数据集等.使用

C# 常用工具合集

Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio下的,老版本可以根据名字自行查找安装. CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. CssCop:可以帮助开发者检查和编写优秀的css代码,提高css对浏览器的兼容性.编码质量和渲染性能.

3、视图和模板

1.在我们的 poll 应用程序中,将有以下四个视图: Poll "index" 页 – 显示最新发布的民意调查. Poll "detail" 页 – 显示一项民意调查的具体问题,不显示该项的投票结果但可以进行投票的 form . Poll "results" 页 – 显示一项给定的民意调查的投票结果. 投票功能 – 为一项给定的民意调查处理投票选项. 在 Django 中,网页及其他内容是由视图来展现的.而每个视图就是一个简单的 Python

专业上的常用的工具和类库集 By 老衣

Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. CssCop:可以帮助开发者检查和编写优秀的css代码,提高css对浏览器的兼容性.编码质量和渲染性能. NuGet Package Manager for Visual Studio 2013: 一组用于自动执行从VS项目中安装.升级.配置和删除依赖包的过程的工具.本文档中的前后端技术选型中的绝大部

老衣的开发工具和类库集之2014版

转载自:http://www.yimingzhi.com/2015/03/lao-yi-de-kai-fa-gong-ju-he-lei-ku-ji-2014-ban 今天是2015年的元宵节了,14年承诺朋友们公开自己常用的工具和类库集,一直没能及时兑现.今天忙里偷个闲,整理了一下清单,在此公布出来,希望能够对大家在.NET.App.Web等开发方面有所帮助.也当是给.NET开发者一个元宵礼物吧,哈哈.不废话直接上菜啦~ [注:最下方有补充更新] Visual Studio 2013 扩展Vi

黑客工具软件大全100套

黑客工具软件大全100套  ゴリラ大統領 2011-05-21 16:55:58 #1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权协议).它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人

【转载】扫描渗透等工具介绍

#1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权协议).它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人写的插件.Nessus 3 已经开发完成(now closed source),其