Timus 1900 Brainwashing Device
2013-12-26 17:27
405 查看
import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { public static void backtrack(int last[][], String result, int i, int j){ if(last[i][j]==0){ result+=" "+i; System.out.println(result.trim()); return; }else if(last[i][j]==-1){ backtrack(last, result, i-1, j); }else{ backtrack(last, result+" "+i, last[i][j], j-1); } } public static void main (String [] args) throws Exception { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int k = scan.nextInt(); int arr[][] = new int ; int arr2[][] = new int ; for(int i=1;i<n;i++){ for(int j=i;j<n;j++){ arr[i][j] = scan.nextInt(); for(int t=j;t>=i;t--){ arr2[i][t] += arr[i][j]; } arr2[i][j] += arr2[i-1][j]; } } int dp[][] = new int [k+1]; int last[][] = new int [k+1]; for(int i=1;i<n;i++){ Arrays.fill(last[i], -1); for(int j=1;j<=Math.min(i, k);j++){ int t1 = dp[i-1][j]; int t2 = 0; int pos = 1; for(int m=i-1;m>=j-1;m--){ if(dp[m][j-1]+arr2[i][i]-arr2[m][i]>=t2){ t2 = dp[m][j-1]+arr2[i][i]-arr2[m][i]; pos = m; } } if(t1>t2){ dp[i][j] = t1; }else{ dp[i][j] = t2; last[i][j] = pos; } } } System.out.println(dp[n-1][k]); backtrack(last, "", n-1, k); } }
一个DP题,假设前N-1个站有K个洗脑机的最优解已经知道,表示为DP[n-1][k], 那么考虑第N 个站点;
两种情况,1. 这个点不放洗脑机,也就是不在最后结果里, 那么dp
[k] = dp[n-1][k];
2. 如果放洗脑机,那么 dp
[k] 的值需要遍历所有的 dp[m][k-1], j-1<=m<n;
dp[m][k-1]的值加上由于引进第N个点而需要补充的值, 取最大和上一种情况比较。有点抽象
最后还是回溯路径。1Y,不错。
相关文章推荐
- main.py
- VMware9虚拟机安装MAC OS X Mountain Lion 10.8.2详细图文教程
- How to Solve Key_read Failed Error in Git Push
- Aix介绍及视频教程
- Paint类介绍
- Cross-Domain on Jersey RESTful Web Services
- Altair收购EMSS公司 增强电磁求解器功能
- 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理
- 解决 Agent admitted failure to sign using the key 问题 with ssh
- Flex crossDomain Security.allDomain() 等跨域机制解析
- ffmpeg main函数
- CDLOD Terrain Paper
- cloud theory is a failure?
- mac下交叉编译protobuf静态库。解决protobuf在iPhone 5s,iPad air,iPad mini2上crash的问题。
- The Snail
- Container With Most Water
- Mango DS Training #48 ---线段树2 解题手记
- Sample 5.14:waiting
- VC运行过程中出现错误:unresolved external symbol _main
- HashMap 多线程处理之 Fail-Fast机制