描述
貓和老鼠,看過吧?貓來了,老鼠要躲進洞裡。在一條數軸上,一共有n個洞,位置分別在xi,能容納vi只老鼠。一共有m只老鼠位置分別在xi,要躲進洞裡,問所有老鼠跑進洞裡的距離總和最小是多少。
輸入格式
兩個用空格隔開的整數m和n。
這一行m個數字分別表示老鼠的位置
接下來n行每行兩個數字分別表示洞的位置和容納量
輸出格式
乙個整數,表示最小的距離總和。(如果無解,輸出-1)
樣例輸入
4 5樣例輸出6 2 8 9
3 62 1
3 64 7
4 7
11——————————————————————————
n <= 500, m <= 500 的時候可以寫費用流 但是要比較好的建圖方式
nm的建圖肯定要掛
#include#includeview code#include
#define ll long long
using
namespace
std;
const
int m=2e3+7,inf=0x3f3f3f3f
;const ll mx=1e15;
intread()
while(c>='
0'&&c<='
9')
return ans*f;
}int
n,m,q[m],vis[m];
intn,s,t;
ll ans,d[m];
struct nodee[m*m];
int first[m],cnt=1
,cur[m];
void ins(int a,int b,int flow,ll cost); first[a]=cnt;}
void insert(int a,int b,int flow,ll cost)
bool
spfa()
else
vis[now]=1
; }
}
}vis[x]=0
; }
return d[s]
}int dfs(int x,int
a) }
vis[x]=0
;
return
flow;
}int
x[m];
ll sum;
struct posqq[m];
bool cmp(pos a,pos b)
intmain()
sort(qq+1,qq+1+m,cmp);
for(int i=1;i<=m;i++) insert(i+n,t,qq[i].k,0
);
for(int i=1;i<=m;i++)
for(int i=1;i<=n;i++)
while(spfa())
printf(
"%lld\n
",ans);
return0;
}
n <= 5000, m <= 5000 的時候就需要dp了
先將洞和老鼠按位置從小到大排一波序
因為老鼠選的洞必然是單調遞增的 我們可以考慮dp
f【i】【j】表示前i個洞選j只老鼠
轉移方程 f【i】【j】=f【i-1】【k】+(k+1到j 的距離
然後發現是三方的寫法 然後就後面可以用單調佇列優化dp降一波複雜度
然後就是n方寫法了
這裡我們每次可以算一下每只老鼠到 第i個洞的 字首
佇列裡扔的就是f【j】+(字首陣列)s【j】就好啦
f【i】=q【l】+s【i】就好辣
#include#includeview code#include
#define ll long long
using
namespace
std;
const
int m=5e3+7
;const ll inf=1e15;
intread()
while(c>='
0'&&c<='
9')
return ans*f;
}int
l,r,n,m,x[m];
struct pose[m];
bool cmp(pos a,pos b)
ll sum,f[m],s[m];
ll pabs(ll x)
struct nodeq[m];
intmain()
sort(x+1,x+1+n);
sort(e+1,e+1+m,cmp);
for(int i=1;i<=n;i++) f[i]=inf;
for(int i=1;i<=m;i++)
}printf(
"%lld\n
",f[n]);
return0;
}
汕頭市隊賽 SRM 08 A
比賽沒參加 所以回來補題咯 a還是自己yy出來了的 可惜比賽沒有打 描述給乙個 01 串設為其 s,詢問是否存在只出現兩次的 01 串 t。這裡的出現定義為存在一串下標 滿足第二個樣例中,0 出現了兩次 這道題肯定先特判一波 1 和 0 是否只出現了2次 這是唯一乙個t能由單一的1或者0組成的情況 ...
汕頭市隊賽 SRM 09 A 撕書
背景 描述 琉璃在撕書。書總共有n頁,都懸浮在數軸上,第i頁的位置為 上面寫著乙個數字 琉璃從右往左撕書。假如看到了第i頁,就把在第i頁左邊,且與之距離 的書都撕掉。第i頁本身不撕 夜子為了盡量地保全魔法書,決定偷偷在琉璃開始撕之前,增加一頁。增加的這一頁必須在所有書頁的右邊,數字隨意。夜子想知道,...
汕頭市隊賽 yyl杯1 T2
背景 描述 有乙個擁有n個城市的國家。這個國家由n 1條邊連線起來。有一天國家發生叛亂。叛軍已占領了一些城市。如果叛軍占領的城市中,存在兩個城市之間有邊直接相連,則稱這種情況是壞的。現在並不知道叛軍占領了那些城市,問有多少種情況是壞的?輸入格式 第1行乙個正整數n,表示國家的大小 第2行到第n行,每...