http://wikioi.com/problem/1403/

f[i]=min(d[1][i]*v*i+k, f[j]+k+d[j+1][i]*v*(i-j))

（ps：这题我很愚蠢的变量重用了，导致答案一直不对。。以后要注意变量名，，不要重名了）

```#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n+1) { rep(bbb, m+1) cout << a[aaa][bbb]; cout << endl; }
inline int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }
const int N=310, M=5010, T=60, oo=20000000;
bool ck[T][N][N];
int p[N], n, m, t, v, k, d[T][T], f[T];
struct ED { int x, y, w; }e[M];
const int ifind(const int &x) { return x==p[x]?x:p[x]=ifind(p[x]); }
const bool check(const int &x, const int &y, const int &u, const int &v) { for1(i, x, y) if(ck[i][u][v]) return false; return true;}
const bool cmp(const ED &a, const ED &b) { return a.w<b.w; }
inline int getans(const int &x, const int &y) {
for1(i, 1, n) p[i]=i;
int fx, fy, ret=0;
for1(i, 1, m) {
fx=ifind(e[i].x); fy=ifind(e[i].y);
if(fx!=fy && check(x, y, e[i].x, e[i].y)) {
p[fx]=fy;
ret+=e[i].w;
}
}
for1(i, 1, n) if(ifind(i)!=ifind(1)) return oo;
return ret;
}

int main() {
scanf("%d%d%d%d%d", &n, &m, &t, &v, &k);
int x, y, c, l, r;
sort(e+1, e+1+m, cmp);
int p=getint();
while(p--) {
if(x>y) swap(x, y); if(l>r) swap(l, r);
for1(i, l, r) ck[i][x][y]=true;
}
for1(i, 1, t) for1(j, i, t) d[i][j]=getans(i, j);
for1(i, 1, t) {
f[i]=d[1][i]*i*v+k;
for2(j, 1, i) if(d[j+1][i]!=oo && f[i]>(f[j]+k+d[j+1][i]*(i-j)*v))
f[i]=f[j]+k+d[j+1][i]*(i-j)*v;
}
print(f[t]);
return 0;
}
```

## 题目描述 Description

PP 特别喜欢玩即时战略类游戏，但他觉得那些游戏都有美中不足的地方。灾害总不降临道路，而只降临城市，而且道路不能被占领，没有保护粮草的真实性。于是他就研发了《新三国争霸》。

PP可真是高手，不一会，就攻下了N-1座城市，加上原来的就有N座城市了，但他忽略了一点……那就是防守同样重要，不过现在还来的及。因为才打完仗所以

N<=300，M<=5000 ，T<=50；

## 输出描述 Output Description

T天在道路的防守上花费最少的军粮。

3 3 5 10 30
1 2 1
2 3 2
1 3 4
1
1 3 2 5

180

## 【wikioi】1403 新三国争霸（dp+kruskal）的更多相关文章

1. Codevs_1403_新三国争霸_(Kruskal+动态规划)

描述 http://codevs.cn/problem/1403/ 共t天,n个点,m条边,选择每条边要付出不同的代价,其中某些天某些边不能用,要保证每一天n个点都是连通的,如果换方案要付出额外的代价 ...

2. codevs1403 新三国争霸

题目描述 Description PP 特别喜欢玩即时战略类游戏,但他觉得那些游戏都有美中不足的地方.灾害总不降临道路,而只降临城市,而且道路不能被占领,没有保护粮草的真实性.于是他就研发了<新 ...

3. [Codevs1403]新三国争霸（MST+DP）

题目:http://codevs.cn/problem/1403/ 分析: 很容易想到对于某个确定的一天,就是求个最小生成树,又因为数据范围很小,所以可以暴力.但问题的关键是如果相邻两天的方案不同,就 ...

4. 【BZOJ-3631】松鼠的新家 树形DP？+ 倍增LCA + 打标记

3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1231  Solved: 620[Submit][Stat ...

5. BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )

从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...

6. poj 2096 Collecting Bugs (概率dp 天数期望)

题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...

7. HDU 2836 Traversal 简单DP + 树状数组

题意:给你一个序列,问相邻两数高度差绝对值小于等于H的子序列有多少个. dp[i]表示以i为结尾的子序列有多少,易知状态转移方程为:dp[i] = sum( dp[j] ) + 1;( abs( he ...

8. dp和px，那些不得不吐槽的故事——Android平台图

http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html 一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理 ...

9. poj2096 Collecting Bugs（概率dp）

Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 1792   Accepted: 832 C ...

## 随机推荐

1. javascript onblur事件阻塞选中input框

先上问题实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

2. wex5&amp;.net开发

一.环境开发 1.baas.net:菜单“窗口”->“首选项” 确定后左侧生成bass.net目录,设置iis网站目录(因为.net网站必须在iis中部署) 2.sqlserver:根据项目可选 ...

4. 安装及破解IntelliJ IDEA15

5. Suricata配置文件说明

本系列文章是Suricata官方文档的翻译加上自己对其的理解,部分图片也是来自那篇文章,当然由于初学,很多方面的理解不够透彻,随着深入后面会对本文进行一定的修正和完善. Suricata使用Yaml作 ...

6. csuoj 1334: 好老师

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1334 1334: 好老师 Time Limit: 1 Sec  Memory Limit: 128 ...

7. BZOJ 2200 道路与航线

好厉害呀这道题,有种豁然开朗的感觉.... 按拓扑顺序跑最短路. 然后注意细节,像WA的代码犯下的错是一笔带过没有丝毫考虑的...然而就是错了. 考试的时候一定要拍啊. #include<ios ...

8. URAL 1004 Sightseeing Trip（最小环）

Sightseeing Trip Time limit: 0.5 secondMemory limit: 64 MB There is a travel agency in Adelton town ...

9. POI取消科学计数法

前台输入手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法 找了下,一般是Double转String,方法一般有两种: 1.利用String.format() sale ...

10. 你真的会使用SQL Server的备份还原功能吗？之一：恢复模型

在SQL Server中,除了系统数据库外,你创建的每一个数据库都有三种可供选择的恢复模型: Simple(简单), full(完整), bulk-logged(批量日志). 下面这条语句可以显示出所 ...