zoukankan      html  css  js  c++  java
  • poj 3400 Dropping the stones

    //next_permutation全排列
    # include <stdio.h>
    # include <algorithm>
    # include <string.h>
    using namespace std;
    struct node
    {
    	int w;
    	int v;
    };
    struct node a[10010];
    int max1(int x,int y)
    {
    	return x>y?x:y;
    }
    int main()
    {
    	int i,n,d,flag,x1,y1,ans,max;
    	int t[10010];
    	while(~scanf("%d%d",&n,&d))
    	{
    		for(i=0;i<n;i++)
    		{
    			scanf("%d%d",&a[i].w,&a[i].v);
    			t[i]=i;
    		}
    		max=0;
    		do
    		{
    			flag=1;
    			x1=0;
    			y1=0;
    			ans=0;
    			for(i=0;i<n;i++)
    			{
    				if(flag)
    				{
    					x1+=a[t[i]].w;
    					if(x1>y1+d)
    						flag=0;
    				}
    				else
    				{
    					y1+=a[t[i]].w;
    					ans+=a[t[i]].v;
    					if(y1>x1+d)
    						flag=1;
    				}
    			}
    			max=max1(max,ans);
    		}while(next_permutation(t,t+n));
    		printf("%d
    ",max);		
    	}
    	return 0;
    }
    
    



    // dfs
    # include <stdio.h>
    # include <algorithm>
    # include <string.h>
    using namespace std;
    struct node
    {
    	int w;
    	int v;
    };
    struct node a[10010];
    int n,d,maxa;
    int vis[10010];
    int max1(int x,int y)
    {
    	return x>y?x:y;
    }
    void dfs(int w1,int w2,int v2,int ans,int flag)
    {
    	if(ans==n)
    	{
    		maxa=max1(maxa,v2);
    		return ;
    	}
    	else
    	{
    		for(int i=0;i<n;i++)
    		{
    			if(vis[i]==0)
    			{
    				vis[i]=1;
    				if(flag&&w1>d+w2)
    				{
    					dfs(w1,w2+a[i].w,v2+a[i].v,ans+1,0);
    				}
    				else if(flag&&w1<=d+w2)
    				{
    					dfs(w1+a[i].w,w2,v2,ans+1,1);
    				}
    				else if(!flag&&w2>d+w1)
    				{
    					dfs(w1+a[i].w,w2,v2,ans+1,1);
    				}
    				else if(!flag&&w2<=d+w1)
    				{
    					dfs(w1,w2+a[i].w,v2+a[i].v,ans+1,0);
    				}
    				vis[i]=0;
    			}
    		}
    	}
    	return ;
    }
    int main()
    {
    	while(~scanf("%d%d",&n,&d))
    	{
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d%d",&a[i].w,&a[i].v);
    		}
    		memset(vis,0,sizeof(vis));
    		maxa=0;
    		dfs(0,0,0,0,1);
    		printf("%d
    ",maxa);
    	}
    	return 0;
    }


  • 相关阅读:
    hdu 4293 2012成都赛区网络赛 dp ****
    hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
    hdu 4288 线段树 暴力 **
    hdu 4278 2012天津赛区网络赛 数学 *
    zoj 3888 线段树 ***
    虚拟化技术详解
    BRD、MRD 和 PRD 之间的区别与联系有哪些?
    salt-master配置、salt-minion配置
    Shell 脚本实现 Linux 系统监控
    Centos 7 安装 Xen
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6829894.html
Copyright © 2011-2022 走看看