zoukankan      html  css  js  c++  java
  • Codeforces 585D Lizard Era: Beginning | 折半搜索

    参考这个博客

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<map>
    #include<vector>
    typedef long long ll;
    using namespace std;
    map< pair<int,int> , pair<int,int> > mp;
    map< pair<int,int> , pair<int,int> > :: iterator it;
    int ans=-92345678,n,a[30][4];
    ll front,back;
    vector <int> v;
    void dfs1(int x,int l,int m,int w,int f)
    {
        if (x>n/2)
        {
    	it=mp.find(make_pair(l-m,w-m));
    	if (it!=mp.end())
    	{
    	    if (l>it->second.first)
    		mp[make_pair(l-m,w-m)]=make_pair(l,f);
    	}
    	else
    	    mp[make_pair(l-m,w-m)]=make_pair(l,f);
    	return ;
        }
        dfs1(x+1,l+a[x][1],m+a[x][2],w,f*3+0);
        dfs1(x+1,l+a[x][1],m,w+a[x][3],f*3+1);
        dfs1(x+1,l,m+a[x][2],w+a[x][3],f*3+2);
    }
    void dfs2(int x,int l,int m,int w,int f)
    {
        if (x>n)
        {
    	it=mp.find(make_pair(m-l,m-w));
    	if (it!=mp.end())
    	{
    	    if (it->second.first+l>ans)
    	    {
    		ans=it->second.first+l;
    		front=it->second.second;
    		back=f;
    	    }
    	}
    	return ;
        }
        dfs2(x+1,l+a[x][1],m+a[x][2],w,f*3+0);
        dfs2(x+1,l+a[x][1],m,w+a[x][3],f*3+1);
        dfs2(x+1,l,m+a[x][2],w+a[x][3],f*3+2);
    }
    void print(int x)
    {
        if (!x) puts("LM");
        else if (x==1) puts("LW");
        else puts("MW");
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
    	scanf("%d%d%d",&a[i][1],&a[i][2],&a[i][3]);
        }
        dfs1(1,0,0,0,0);
        dfs2(n/2+1,0,0,0,0);
        if (ans>-92345678)
        {
    	for (int i=(n+1)/2;i>=1;i--)
    	{
    	    v.push_back(back%3);
    	    back/=3;
    	}
    	for (int i=n/2;i>=1;i--)
    	{
    	    v.push_back(front%3);
    	    front/=3;
    	}
    	for (int i=v.size()-1;i>=0;i--)
    	    print(v[i]);
        }
        else puts("Impossible");
        return 0;
    }
    
  • 相关阅读:
    互联网人25岁毕业 拿一万块钱月薪 (转)
    在windows平台编译openAL Android 库
    lua简单包装
    libevent 简单学习
    cocos2dx中使用tolua++使lua调用c++函数
    《OpenGL超级宝典》编程环境配置
    快速排序、归并排序、堆排序三种算法性能比较
    二叉树的三种遍历的递归与非递归算法
    boost之bind
    boost之内存管理
  • 原文地址:https://www.cnblogs.com/mrsheep/p/8039605.html
Copyright © 2011-2022 走看看