uva 10404 - Bachet's Game
来源:互联网 发布:淘宝上卖高仿的处罚 编辑:程序博客网 时间:2024/05/16 08:13
import java.io.*;import java.util.*;public class stackingbox { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); while(scan.hasNextInt()){ int n = scan.nextInt(); int num = scan.nextInt(); int set[] = new int[num]; for(int i=0;i<num;i++){ set[i] = scan.nextInt(); } int dp[] = new int[n+1]; dp[0] = 0; for(int i=0;i<=n;i++){ for(int j=0;j<num;j++){ if(i+set[j]<=n) dp[i+set[j]] = Math.max(dp[i+set[j]], 1-dp[i]); } } if(dp[n]==1){ System.out.println("Stan wins"); }else{ System.out.println("Ollie wins"); } } }}
带有博弈的dp,开始想的是二维dp,主要是USACO上做过一个类似的,那个题目是每个石头有重量,然后求最大重量。
结果在纸上一推,发现一维dp足够。DP保存两位选手在最利于自己的选择下的输赢结果。
这个题目就是比如一次可以拿1个,3个或者8个,那么dp[i] 的值取决于dp[i-1], dp[i-3], dp[i-8].
如果dp[i-1], dp[i-3], dp[i-8]都是先手赢(这时先手是ollie), 那么作为最开始的stain没的法选择,选哪种都要输,所以dp[i]一定为0,即stain输
如果dp[i-1], dp[i-3], dp[i-8]中有一个先手必输(ollie输), 那么最开始的stain必定选这个让ollie输,stain赢。
这个题目数据比较好,貌似过了样例就行了,1Y很开心
- uva 10404 Bachet's Game
- UVA 10404 Bachet's Game
- UVa 10404 - Bachet's Game
- UVa 10404 - Bachet's Game
- uva 10404 - Bachet's Game
- UVa 10404 - Bachet's Game
- UVa 10404 - Bachet's Game
- Uva-10404-Bachet's Game
- UVa:10404 Bachet's Game
- UVA - 10404 Bachet's Game
- UVa 10404 - Bachet's Game
- uva 10404 Bachet's Game
- UVA 10404 Bachet's Game
- UVA-10404-Bachet's Game
- UVA 10404 Bachet's Game
- UVA 10404 Bachet's Game
- UVA 10404 Bachet's Game
- uva 10404 Bachet's Game
- TreeView控件中拖拽事件与鼠标事件的坐标问题(MouseEventArgs 和 DragEventArgs 坐标问题)
- ListView下拉刷新数据功能篇一
- hdu 1196 Lowest Bit
- GO 语言 读写文件
- 小试DirectX游戏CPU优化
- uva 10404 - Bachet's Game
- 网络下载器
- 无法显示进程。没有正确安装调试器。请运行安装程序安装或修复调试器。
- Spring Batch任务的异步执行
- 关于hibernate中报Duplicate class/entity mapping org.model.User错的问题
- 通过flash builder查看由MXML文件所翻译的actionscript
- couldn't connect to server 127.0.0.1:27017 src/mongo/
- ListView下拉刷新数据功能篇二
- Oracle 11g安装图文攻略