time limit: 1 second
memory limit: 128 mb
【問題描述】
現有n個任務,要交給a和b完成。每個任務給a或給b完成,所需的時間分別為ai和bi。問他們完成所有的任務至少要多少時間。
【輸入格式】
第一行乙個正整數n,表示有n個任務。
接下來有n行,每行兩個正整數ai,bi。
【輸出格式】
乙個數,他們完成所有的任務至少要的時間。
【輸入輸出樣例解釋】
a完成任務1和任務2,時間為11。b完成任務3,時間為12。
或者 a完成任務1和任務3,時間為12。b完成任務2,時間為11。
【限制】
30%的資料滿足:1 <= n <= 20
100%的資料滿足:1 <= n <= 200 , 1 <= ai,bi <=200
sample input
3 5 10
6 11
7 12
sample output
【題目鏈結】:
【題解】
設f[i][j]表示前i個任務,a機器花了j時間,b機器花的時間的最小值;
即f[i][j]表示的是b機器花了多少時間;
則 f[i][j] = min(f[i-1][j]+b[i],f[i-1][j-a[i]]);
其中前乙個表示第i個任務用b機器搞,後乙個表示用a機器搞;
比較奇葩的狀態轉移方程.
【完整**】
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair pii;
typedef pairpll;
void rel(ll &r)
void rei(int &r)
const
int maxn = 200+10;
const
int inf = 0x3f3f3f3f;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
int f[maxn][maxn*maxn];
int n;
int a[maxn],b[maxn];
int main()
}int ans = inf;
rep1(i,0,now)
ans = min(ans,max(i,f[n][i]));
printf("%d\n",ans);
return
0;}
1301 任務分配
2003年浙江省隊選拔賽 時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 題解檢視執行結果 有n位工作人員,同時有n項任務,每人必須承擔一項任務,若給出某人不能從事的某些任務,問要安排好工作,共有多少種方案?輸入描述 input description 輸入檔案第1行為...
CODEVS 1301 任務分配
描述 有n位工作人員,同時有n項任務,每人必須承擔一項任務,若給出某人不能從事的某些任務,問要安排好工作,共有多少種方案?分析 容斥原理的應用.先看看樣例 四個人 a,b,c,d a 不能選擇 2 b 不能選擇 2 3 c 不能選擇 3 4 d 不能選擇 4 總數是1 4全排列的個數 4 24 再考...
hdu 4864 任務分配貪心
有n臺機器,m個任務,每台機器有xi時間,yi等級,每個任務也有xj,yj,當乙個任務可以被處理的條件是,xj xi 且 yj 對於每個任務,時間大的優先去匹配,時間相同的,等級大的優先去匹配,因為時間佔得多,時間多1就多500,而等級最多才差200。然後匹配的時候,盡量使用等級小的去匹配,而時間只...