Locker UVA
来源:互联网 发布:安卓好用的拼长图软件 编辑:程序博客网 时间:2024/06/08 01:12
动态规划的一道题目,利用dp[i][m][n][k],表示目前处理的是源串的第i位的数字,同时源串第i位的数字为m,i+1位的数字为n,第i+2位的数字为k。那么就可以找到对应目标串的第i位数字,从而开始"尝试"每一种的旋转方法,记录并且进行相应的更新即可,具体实现见如下代码:
package a;//实际提交的时候记得去掉包名import java.util.Arrays;import java.util.Scanner;public class Main { String s; String s1,s2; int visit[][][][]=new int[1010][10][10][10]; int dp[][][][]=new int[1010][10][10][10]; int record; int Inf=1<<20; int L; public int DP(int i,int m,int n,int k){ if(i>=L) return 0; if(visit[i][m][n][k]==record) return dp[i][m][n][k]; visit[i][m][n][k]=record; int aim=s2.charAt(i)-'0'; int ans=Inf; if(m>aim){ int up=m-aim; for(int up1=0;up1<=up;up1++){ for(int up2=0;up2<=up1;up2++){ int newn=(n-up1+10)%10; int newk=(k-up2+10)%10; int k2=s1.charAt(i+3)-'0'; ans=Math.min(ans,DP(i+1,newn,newk,k2)+up); } } int down=10-up; for(int down1=0;down1<=down;down1++){ for(int down2=0;down2<=down1;down2++){ int newn=(n+down1)%10; int newk=(k+down2)%10; int k2=s1.charAt(i+3)-'0'; ans=Math.min(ans,DP(i+1,newn,newk,k2)+down); } } }else{//m<=aim int down=aim-m; for(int down1=0;down1<=down;down1++){ for(int down2=0;down2<=down1;down2++){ int newn=(n+down1)%10; int newk=(k+down2)%10; int k2=s1.charAt(i+3)-'0'; ans=Math.min(ans,DP(i+1,newn,newk,k2)+down); } } int up=10-down; for(int up1=0;up1<=up;up1++){ for(int up2=0;up2<=up1;up2++){ int newn=(n-up1+10)%10; int newk=(k-up2+10)%10; int k2=s1.charAt(i+3)-'0'; ans=Math.min(ans,DP(i+1,newn,newk,k2)+up); } } } dp[i][m][n][k]=ans; return ans; } public void Solve(){ Scanner scan=new Scanner(System.in); for(int i=0;i<1010;i++) { for (int j = 0; j < 10; j++) { for(int k=0;k<10;k++) { Arrays.fill(visit[i][j][k], -1); } } } record=0; while(scan.hasNext()){ s=scan.nextLine(); int ind=s.indexOf(' '); s1=s.substring(0,ind); s2=s.substring(ind+1); L=s1.length(); s1+="000"; s2+="000"; record++; System.out.println(DP(0,s1.charAt(0)-'0',s1.charAt(1)-'0',s1.charAt(2)-'0')); } } public static void main(String[] args){ Main a=new Main(); a.Solve(); }}
阅读全文
0 0
- Locker UVA
- Locker UVA
- uva 1631 locker
- UVA-1631 Locker(DP)
- UVA 1631 Locker
- Uva 1631 DP locker
- UVA 1631-Locker(DP)
- uva 1631——Locker
- UVa 1631 Locker (密码锁)
- HDU 4433 locker(DP)( UVA 1631 - Locker)
- UVA 12712 Pattern Locker(简单排列组合数学题)
- UVA 12712 Pattern Locker(排列的基本应用)
- UVA 1631 Locker(HDU 4433)(DP)
- hdu4433 locker
- hdu4433 locker
- UVA1631 - Locker
- Pattern Locker
- hdu4433 locker
- 笔记:php curl请求头与服务端接收
- 【iOS_GitHub】banner(广告页/循环滚动广告图片/无限循环自动滚动卡片)
- 串口 i2c
- Netty RPC demo 试跑
- Codeforces Round #336 (Div. 2)-D Zuma(区间DP)
- Locker UVA
- Spring security+rememberme学习笔记(1)
- c++学习:析构函数
- Log4net详细说明
- C# 多个table转成一个table的一行
- 天天学Linux命令35--top命令
- 基于Android的http&https中间人攻击
- Android--开机自启动(activity或service)
- 安卓自动推送JPush