2 Player and N Coin
class Solution { public void printChoices(int[] A, int[][] C) {
System.out.println("硬币列表如下:");
for(int i=0,l=A.length; i<l; i++) {
System.out.print(A[i] + "\t");
}
System.out.println("");
final int N = C.length;
String[] names = {"本人", "对手"};
int L = 0, R = N-1, WHO = 0;
while(L<=R) {
int c = C[L][R];
System.out.println(names[WHO] + "选择第 " + c + " 个元素" + A[c]);
WHO = (WHO+1)%2;
if(L==c) {
L = L+1;
}
if(R==c) {
R = R-1;
}
if(L == R) {
break;
}
}
} public int maxMoney(int[] A) {
final int N = A.length;
int[][] C = new int[N][N];
int[][] M = new int[N][N]; // 每个子问题最优解(赚的最多钱) // 设M(i,j) 为从第i到第j个硬币中能获得的最大收入
// j-i>=2 时
// M(i,j) = max(
// A[i] + min(M(i+2,j), M(i+1,j-1)),
// A[j] + min(M(i+1,j-1), M(i,j-2)),
// ); // 初始化坐标 [i,i] 和 [i,i+1] 处的决策和最大收入
for(int i=0; i<N; i++) {
M[i][i] = A[i];
C[i][i] = i;
if(i<N - 1) {
M[i][i+1] = Integer.max(A[i], A[i+1]);
C[i][i+1] = (A[i] < A[i+1] ? i+1 : i);
}
} // 计算所有 [i,i+2] [i,i+3]... 处的决策和最大收入
for(int i=N-2; i>=0; i--) {
for(int j=i+2; j<N; j++) {
int I = A[i] + Integer.min(M[i+2][j], M[i+1][j-1]);
int J = A[j] + Integer.min(M[i+1][j-1], M[i][j-2]);
M[i][j] = Integer.max(I, J);
C[i][j] = I>J ? i : j;
}
} printChoices(A, C);
return M[0][N-1];
} public static void main(String[] args) {
Solution s = new Solution();
int[] a = {1,20,10,2};
int r = s.maxMoney(a);
System.out.println(r);
}
}
2 Player and N Coin的更多相关文章
- Android开发训练之第五章第五节——Resolving Cloud Save Conflicts
Resolving Cloud Save Conflicts IN THIS DOCUMENT Get Notified of Conflicts Handle the Simple Cases De ...
- Coins in a Line
Description There are n coins in a line. Two players take turns to take one or two coins from right ...
- Coins in a Line I
Description There are n coins with different value in a line. Two players take turns to take one or ...
- 洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
- [luogu2964][USACO09NOV][硬币的游戏A Coin Game] (博弈+动态规划)
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
- E - Coin Game
After hh has learned how to play Nim game, he begins to try another coin game which seems much easie ...
- HDU 3951 Coin Game (简单博弈)
Coin Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- [USACO09NOV]硬币的游戏A Coin Game
https://daniu.luogu.org/problemnew/show/P2964 dp[i][j] 表示桌面上还剩i枚硬币时,上一次取走了j个的最大得分 枚举这一次要拿k个,转移到dp[i- ...
- Coin Game
Problem Description After hh has learned how to play Nim game, he begins to try another coin game wh ...
随机推荐
- Jquery :animate反复执行的动画可以利用函数的回调
<html><head><script type="text/javascript" src="/jquery/jquery.js" ...
- React onWheel
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- js字符串和正则表达式
字符串的生成转换 你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种: var myStr = num.toString(); // "19" var myStr ...
- pandas取值
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...
- [转]curl的详细使用
转自:http://www.cnblogs.com/gbyukg/p/3326825.html 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos ...
- pycharm5.0 快捷键大全osx
官网链接https://resources.jetbrains.com/assets/products/pycharm/PyCharm_ReferenceCard_mac.pdf 一直想给别人安利py ...
- Django admin 一些有用的设置
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的 ...
- unwrap bug
https://cn.mathworks.com/matlabcentral/newsreader/view_thread/93276
- HUD 1024 Max Sum Plus Plus (滚动数组)
题意:从一个序列中选出分成不交叉的m段 的最大和 解析 : 题目中 1 <= n <=1000000 所以二维数组是不能用了 所以 要想到简化为一维 dp[i][j]表示以i结尾的前i个 ...
- 自学Linux Shell13.2-选项处理(主要getopt、getopts命令)
点击返回 自学Linux命令行与Shell脚本之路 Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法: 命令行参数(添加在名利后面的数据) 命令行选项(可修改命令行为的单个 ...