码迷,mamicode.com
首页 > 其他好文 > 详细

URAL 2072 Kirill the Gardener 3

时间:2018-01-28 12:44:29      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:ble   bsp   using   target   return   pac   its   get   color   

URAL 2072

思路:

1.状压dp+记忆化搜索

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int INF=0x3f3f3f3f;
int dp[(1<<20)+5];
int a[25];
int n;
int dfs(int sum,int sta){
    if(dp[sta]!=INF)return dp[sta];
    for(int i=0;i<n;i++){
        if(sta&(1<<i)){
            int temp=sta-(1<<i);
            int tsum=sum-a[i];
            int l=(i-1+n)%n;
            int r=(i+1)%n;
            if(sta&(1<<l))temp-=1<<l,tsum-=a[l];
            if(sta&(1<<r))temp-=1<<r,tsum-=a[r];
            dp[sta]=min(dp[sta],dfs(tsum,temp)+tsum);
        } 
    }
    return dp[sta];
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int sum=0;
    mem(dp,INF);
    dp[0]=0;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i],sum+=a[i];
    cout<<dfs(sum,(1<<n)-1)<<endl;
    return 0;
} 

2.dfs+剪枝

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int N=30;
const int INF=0x7f7f7f7f;
int a[N],sum[N];
bool vis[N];
int ans=INF,n;
void dfs(int res,int t){
    if(t>=ans)return ;//剪枝
    if(res==0){
        ans=min(ans,t);
    }
    for(int i=1;i<=n;i++){
        if(!vis[i]){
            int l=i-1;
            int r=i+1;
            if(l==0)l=n;
            if(r==n+1)r=1;
            if(vis[l])l=25;
            if(vis[r])r=25;
            vis[l]=vis[i]=vis[r]=true;
            dfs(res-a[l]-a[i]-a[r],t+res-a[l]-a[i]-a[r]);
            vis[l]=vis[i]=vis[r]=false;
        }
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
    dfs(sum,0);
    cout<<ans<<endl;
    return 0;
}

 

URAL 2072 Kirill the Gardener 3

标签:ble   bsp   using   target   return   pac   its   get   color   

原文地址:https://www.cnblogs.com/widsom/p/8370706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!