CCF CSP认证201403-5 任务调度(10分)

201403-5 任务调度

题目
CCF CSP认证201403-5 任务调度(10分)_第1张图片

思路

胡搜混分。等我会了再说。
代码(10分)

#include
const int inf=0x3fffffff;
int n,a[4][40];
int ans=inf;
bool done[40]={false};

void dfs(bool ongpu,int left,int num,int res){
    if(num==n){
        if(res<ans) ans=res;
        return;
    }
    if(res>=ans) return;
    for(int i=0;i<n;i++){
        if(done[i]==false){
            done[i]=true;
            if(a[i][0]>left) dfs(false,a[i][0]-left,num+1,res+a[i][0]-left);
            else dfs(ongpu,left-a[i][0],num+1,res);
            done[i]=false;
        }
    }
    if(ongpu) {dfs(false,0,num,res);return;}
    for(int i=0;i<n;i++){
        if(done[i]==false){
            done[i]=true;
            if(a[i][2]>left) dfs(true,a[i][2]-left,num+1,res+a[i][2]-left);
            else dfs(true,left-a[i][2],num+1,res);
            done[i]=false;
        }
    }
    for(int i=0;i<n;i++){
        if(done[i]==false){
            done[i]=true;
            dfs(true,0,num+1,res+a[i][3]);
            done[i]=false;
        }
    }
}

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d%d%d%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3]);
    }
    dfs(false,0,0,0);
    printf("%d",ans);
    return 0;
}

你可能感兴趣的:(ccf,ccf,csp,c/c++,dfs)