zoukankan      html  css  js  c++  java
  • 任务安排(搜索)

    给定N(<=30)个人和N台机器,以及每个人操作某台机器的收益。请计算所有人都工作的情况下,最大的收益和。
    输入:
    第一行两个数分别表示人和机器的数量(两数相等)
    接下来若干行,每行三个数,a,b,c表示a 操作机器b的收益为c.
    输出:
    两个数。(第一个数表示参加工作的人数(此数为N),第二个数表示最大收益和。)
    样例:
    输入:
    3 3
    1 2 10
    1 1 9
    1 3 3
    2 1 10
    2 2 9
    2 3 3
    3 1 8
    3 2 9
    3 3 8
    输出:
    3 28

    简单搜索,暴力剪枝。

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std ;
     7 
     8 int cnt, jv[31][31][2], sum[31], ans ;  
     9 bool used[31] ; 
    10 struct id { int sze, chu ; }; id lie[31] ;
    11 
    12 int cmp ( id a, id b ) {
    13     return  a.chu < b.chu ;
    14 }
    15 
    16 
    17 void dfs ( int sze, int jia ) {
    18     if( sze> cnt ) {
    19         if(ans < jia ) ans = jia ;
    20         return ;
    21     }
    22     int now = lie[sze].sze ;
    23     
    24     if( sum[cnt] - sum[sze-1] + jia <= ans ) return ;
    25     for(int x = jv[now][0][0]; x>=1; x--) {
    26         int to = jv[now][x][0] ;
    27         if( used[to] ) continue ;    
    28         used[to] = 1 ;
    29         dfs( sze+1, jia+jv[now][x][1] ) ;
    30         used[to] = 0;
    31     }
    32     return ;
    33 }
    34 
    35 
    36 
    37 int main ( ) {
    38 //    freopen( "1.txt", "r", stdin ) ;
    39     scanf( "%d", &cnt ) ; scanf( "%d", &cnt ) ;
    40     int a, b, c;
    41     int n[31] ; memset( n, 0, sizeof(n) ) ;
    42     while( cin>>a>>b>>c ) {
    43         jv[a][ ++jv[a][0][0] ][0] = b ; 
    44         jv[a][ jv[a][0][0] ][1] = c ;
    45         n[a] = max( n[a], c ) ;
    46     }
    47     for(int x = 1; x <= cnt; x++) {
    48         lie[x].chu = jv[x][0][0] ;
    49         lie[x].sze = x ;
    50     }
    51     sort(lie+1, lie+1+cnt, cmp) ;
    52         
    53     for( int x = 1; x <= cnt; x++) {
    54         int now = lie[x].sze ;
    55         sum[x] = sum[x-1] + n[now] ;    
    56     }
    57     dfs( 1, 0 ) ;
    58     printf( "%d %d
    ", cnt, ans) ;
    59 }
  • 相关阅读:
    机器学习--避免过度拟合 笔记
    《机器学习》第三章 决策树学习 笔记加总结
    《机器学习》第二章 概念学习和一般到特殊序
    《机器学习》第一章 引言 笔记加总结
    jmeter+ant生成html报告
    jmeter之beanshell使用
    html常用标签
    css样式
    fiddler设置重定向
    fiddler设置断点
  • 原文地址:https://www.cnblogs.com/Ateisti/p/6900320.html
Copyright © 2011-2022 走看看