HDU 1224 Free DIY Tour
2014-07-24 10:25
375 查看
题意:给出每个城市interesting的值,和城市之间的飞行路线,求一条闭合路线(从原点出发又回到原点)
使得路线上的interesting的值之和最大
因为要输出路径,所以用pre数组来保存前驱
在输出路径的时候,我是把前驱一次放在route数组里面,然后再将整个数组反转过来
另外,看别人的题解里面还有一种递归的方法求路径,挺有新意,学习了
我的做法:
代码君
使得路线上的interesting的值之和最大
因为要输出路径,所以用pre数组来保存前驱
在输出路径的时候,我是把前驱一次放在route数组里面,然后再将整个数组反转过来
另外,看别人的题解里面还有一种递归的方法求路径,挺有新意,学习了
我的做法:
//#define LOCAL #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 5100; bool flight[110][110]; int city[110]; int dp[110]; int pre[110]; int route[110]; void putroute(int p) { if(p == 0) return; putroute(pre[p]); printf("%d->", p); } int main(void) { #ifdef LOCAL freopen("1224in.txt", "r", stdin); #endif int N, kase; scanf("%d", &N); for(kase = 1; kase <= N; ++kase) { if(kase > 1) printf("\n"); int n; scanf("%d", &n); int i; for(i = 1; i <= n; ++i) scanf("%d", &city[i]); city[n + 1] = 0; int m, from, to; memset(flight, 0, sizeof(flight)); scanf("%d", &m); for(i = 1; i <= m; ++i) { scanf("%d%d", &from, &to); flight[from][to] = true; } memset(dp, 0, sizeof(dp)); memset(pre, 0, sizeof(pre)); int j; for(i = 2; i <= n + 1; ++i) for(j = 1; j < i; ++j) if(flight[j][i] && (dp[j] + city[i]) > dp[i]) { dp[i] = dp[j] + city[i]; pre[i] = j; } printf("CASE %d#\n", kase); printf("points : %d\n", dp[n + 1]); printf("circuit : "); putroute(pre[n + 1]); printf("1\n"); } return 0; }
代码君
相关文章推荐
- HDU-1224-Free DIY Tour
- HDU 1224 Free DIY Tour DP -
- hdu 1224 Free DIY Tour
- hdu 1224 Free DIY Tour
- 动态规划:HDU1224-Free DIY Tour
- HDU 1224——Free DIY Tour
- hdu 1224 Free DIY Tour
- HDU 1224 Free DIY Tour
- HDU 1224-Free DIY Tour
- hdu 1224 Free DIY Tour
- HDU - 1224 Free DIY Tour DP
- HDU - 1224 - Free DIY Tour
- Free DIY Tour HDU - 1224 DAG上的最长路 dp 水题
- hdu 1224 Free DIY Tour Flyod
- hdu Free DIY Tour
- HDU Free DIY Tour(dp)
- 【HDOJ】1224 Free DIY Tour
- HDU 1224 Free DIY Tour(DP)
- hdu 1224 Free DIY Tour 【动态规划】
- hdu 1224 Free DIY Tour(动态规划)