【计蒜客】取数游戏
2018-03-29 10:58
246 查看
有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,两人轮流从序列的两端取数,每次有数字被一个玩家取走后,这个数字被从序列中去掉并累加到取走该数的玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。
编一个执行最优策略的程序,最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为两位玩家执行最优策略。
输入第1行包括一个正整数N(2≤N≤100), 表示序列中正整数的个数。输入第2行包含用空格分隔的N个正整数(1≤所有正整数≤200)。
只有一行,用空格分隔的两个整数: 依次为先取数玩家和后取数玩家的最终得分。
获得gain[i][j](获得到j最大的取值方法),
在只有两个数字的时候,有两种取值方法
取第一个数字gain[i+1][j]
取第二个数字gain[i][j-1]
选一个最大的获取。
是一个自底向上的动态规划解决方法
gain[i][j]=sum[j]-sum[i-1]-Math.min(gain[i+1][j], gain[i][j-1]);
public class Test4 {
public static void main(String args[]){
Test4 test=new Test4();
test.start();
}
public void start(){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int array[]=new int[n+1];
int sum[]=new int[n+1];
int gain[][]=new int[n+1][n+1];
for(int i=1;i<=n;i++){
array[i]=scan.nextInt();
sum[i]+=sum[i-1]+array[i];
gain[i][i]=array[i];
}
for(int i=n-1;i<array.length&&i>0;i--){
for(int j=i;j<array.length;j++){
gain[i][j]=sum[j]-sum[i-1]-Math.min(gain[i+1][j], gain[i][j-1]);
}
}
System.out.println(gain[1]
+" "+(sum
-gain[1]
));
}
}
编一个执行最优策略的程序,最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为两位玩家执行最优策略。
输入第1行包括一个正整数N(2≤N≤100), 表示序列中正整数的个数。输入第2行包含用空格分隔的N个正整数(1≤所有正整数≤200)。
只有一行,用空格分隔的两个整数: 依次为先取数玩家和后取数玩家的最终得分。
样例输入
6 4 7 2 9 5 2
样例输出
18 11大神思路:
获得gain[i][j](获得到j最大的取值方法),
在只有两个数字的时候,有两种取值方法
取第一个数字gain[i+1][j]
取第二个数字gain[i][j-1]
选一个最大的获取。
是一个自底向上的动态规划解决方法
gain[i][j]=sum[j]-sum[i-1]-Math.min(gain[i+1][j], gain[i][j-1]);
public class Test4 {
public static void main(String args[]){
Test4 test=new Test4();
test.start();
}
public void start(){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int array[]=new int[n+1];
int sum[]=new int[n+1];
int gain[][]=new int[n+1][n+1];
for(int i=1;i<=n;i++){
array[i]=scan.nextInt();
sum[i]+=sum[i-1]+array[i];
gain[i][i]=array[i];
}
for(int i=n-1;i<array.length&&i>0;i--){
for(int j=i;j<array.length;j++){
gain[i][j]=sum[j]-sum[i-1]-Math.min(gain[i+1][j], gain[i][j-1]);
}
}
System.out.println(gain[1]
+" "+(sum
-gain[1]
));
}
}
相关文章推荐
- 【计蒜客】取数游戏
- noi 9265 取数游戏
- 计蒜客 第18题:跳跃游戏
- 【BZOJ 1978】 [BeiJing2010]取数游戏 game
- 洛谷 1288 取数游戏
- 【u108】取数游戏
- 9265:取数游戏
- fzu 1927 取数游戏 【最小费用流】
- 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解
- [贪心 图论] 计蒜客 40 百度之星 聚会游戏
- 【区间DP+高精】codevs1166 矩阵取数游戏题解
- 【计蒜客系列】挑战难题20:跳跃游戏二
- 洛谷P1288 取数游戏II
- 【bzoj1978】【BeiJing2010】取数游戏 game【递推】
- 取数游戏:
- bzoj 1978: [BeiJing2010]取数游戏 game -- dp
- 【计蒜客系列】挑战难题20:跳跃游戏二
- BZOJ 1978: [BeiJing2010]取数游戏 game
- CCF NOI100002 取数游戏
- BZOJ1978 [BeiJing2010]取数游戏 建图+拓扑序