uva 590
来源:互联网 发布:网络下载速度很不稳定 编辑:程序博客网 时间:2024/06/17 01:08
import java.io.*;import java.util.*;public class Main{ public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); int count = 0; while (true) { count++; int n = scan.nextInt(); if (n == 0) { return; } int[][][] map = new int[n+1][n+1][30]; int d = scan.nextInt(); int[][] table = new int[n+1][d + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (j == i) { continue; } int tmp = scan.nextInt(); map[i][j][0] = tmp; for (int k = 1; k <= tmp; k++) { map[i][j][k] = scan.nextInt(); } } } for(int i=0;i<=n;i++){ Arrays.fill(table[i], 9999999); } table[1][0] = 0; for (int j = 1; j <= d; j++) { for (int i = 1; i <= n; i++) { table[i][j] = 9999999; for (int t = 1; t <= n; t++) { if (t == i) { continue; } int num = (j-1) % map[t][i][0] +1; if(map[t][i][num]==0||table[t][j-1]==9999999){ continue; } table[i][j] = Math.min(table[i][j], table[t][j - 1] + map[t][i][num]); } } } //Dumper.print_2_arr(table, n+1, d+1); System.out.println("Scenario #" + count); if (table[n][d] < 9999999) { System.out.println("The best flight costs " + table[n][d] + ".\n"); } else { System.out.println("No flight possible.\n"); } } }}
思路的正确的,代码又没写对。不过话说思路实在是比较明显。。。尤其是在你知道这是DP题的时候,不往图论上想的话那么思路是很明显的。
开始想了一个3维的dp,写着WA。。。其实就是dp[i][j][k], 代表了从i 到 j, 在第K天的最小花费。
后来开了别人的代码,发现全部初始化成9999999, 然后dp[1][0] = 0. 在后面的代码加一个条件,如果dp[j][i-1] == 999999, continue;
这样就跳过了这个城市,也就是说最开始只有城市1会被处理,那么后面表了的值全是由城市1推出来的。
这样就降了一维,不知道N立方的会不会TLE,毕竟城市只有15.
Anyway。。。
- uva 590
- UVA 590
- uva 590(dp)
- uva 590 dp
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- debug 与 release
- Java_高级for循环
- C++ 与 Java区别
- tomcat类加载器深入研究笔记
- hdu2594-Simpsons’ Hidden Talents
- uva 590
- 『jQuery』取指定url格式
- Servlet中配合common-fileupload.jar和common-io.jar进行文件上传
- 统计二进制中1的个数和 - 位运算
- linux下scp的使用
- makefile的简介与使用
- 初学JQuery
- 文件的复制(模拟DOS下的文件复制命令)
- Linux集群的安装与并行计算