目录
- 10.4
- BZOJ4247 挂饰
- BZOJ 1003 [ZJOI2006]物流运输
10.4
BZOJ4247 挂饰
const int maxN = 2e3 + 7;
struct Node{
int a , b;
}a[maxN];
int f[maxN][maxN];
bool cmp(Node a, Node b) {
return a.a > b.a;
}
signed main() {
int n = gi();
rep(i , 1, n) {
a[i].a = gi();
a[i].b = gi();
}
sort(a + 1,a + n + 1, cmp);
int ans = 0;
memset(f,-0x3f,sizeof(f));
f[0][1] = 0;
rep(i , 1, n) {
rep(j , 0, n) {
f[i][j] = max(f[i - 1][j] , f[i - 1][max(j - a[i].a , 0LL) + 1] + a[i].b);
}
}
for(int i = 0;i <= n;++ i) ans = max(ans , f[n][i]);
printf("%lld",ans);
return 0;
}
/*
5
0 4
2 -2
1 -1
0 1
0 3
*/
BZOJ 1003 [ZJOI2006]物流运输
const int maxM = 1e5 + 7;
const int maxN = 10000 + 7;
const int inf = 1000000000;
struct Node{
int v , nex, w;
}Map[maxM];
int head[maxN] , num;
void add_Node(int u , int v, int w) {
Map[++ num] = (Node) {v , head[u], w};
head[u] = num;
}
PII a[maxN];
int b[maxN];
int f[maxN],d;
int n, m, k, e;
bool vis[maxN],v[maxN];
int dis[maxN];
queue q;
bool ok[1001][1001];
int cost(int l , int r) {
rep(i , 1, m) dis[i] = inf , v[i] = 0,vis[i] = true;
rep(i , 1, d) {
rep(j , l ,r) {
if(ok[b[i]][j]) {
vis[b[i]] = false;
break;
}
}
}
q.push(1);
dis[1] = 0;v[1] = 1;
while(!q.empty()) {
int now = q.front();q.pop();
v[now] = 0;
for(int i = head[now];i;i = Map[i].nex) {
int y = Map[i].v;
if(!vis[y]) continue;
if(dis[y] > dis[now] + Map[i].w) {
dis[Map[i].v] = dis[now] + Map[i].w;
if(!v[y]) {
v[y] = true;
q.push(y);
}
}
}
}
if(dis[m] == inf) return inf;
return dis[m] * (r - l + 1);
}
int main() {
memset(f , 0x3f, sizeof(f));
n = gi() , m = gi(), k = gi(), e = gi();
while(e --) {
int u = gi() , v = gi(), w = gi();
add_Node(u , v, w);
add_Node(v , u, w);
}
f[0] = 0;
d = gi();
for(int i = 1;i <= d;++ i) {
b[i] = gi(); int t1 = gi() , t2 = gi();
rep(j , t1, t2) ok[b[i]][j] = true;
}
rep(i , 1, n) {
f[i] = cost(1 , i);
rep(j , 1, i - 1) {
f[i] = min(f[j] + cost(j + 1, i) + k ,f[i]);
}
}
printf("%d",f[n]);
return 0;
}