uva 10306 e-Coins

来源:互联网 发布:淘宝申请退款流程手机 编辑:程序博客网 时间:2024/06/07 12:32
import java.math.BigInteger;import java.util.*;public class Main{    public static void dp(int[][] arr,int num,int target){        int[][] table = new int[target+1][target+1];        for(int i=0;i<=target;i++){            Arrays.fill(table[i], Integer.MAX_VALUE);        }        table[0][0] = 0;        for(int i=0;i<num;i++){            for(int j=arr[i][0];j<=target;j++){                for(int k=arr[i][1];k<=target;k++){                    if(table[j-arr[i][0]][k-arr[i][1]]!=Integer.MAX_VALUE){                        table[j][k] = Math.min(table[j][k], table[j-arr[i][0]][k-arr[i][1]]+1);                    }                }            }        }        int result = 99999999;        int t=target*target;        for(int i=0;i<=target;i++){            for(int j=0;j<=target;j++){                if(i*i+j*j==t&&result>table[i][j])                    result = table[i][j];            }        }        if(result==99999999){            System.out.println("not possible");        }else{            System.out.println(result);        }    }    public static void main (String [] args) throws Exception {        Scanner scan = new Scanner(System.in);        int cases = scan.nextInt();        for(int i=0;i<cases;i++){            int num = scan.nextInt();            int target = scan.nextInt();            int arr[][] = new int[num][2];            for(int j=0;j<num;j++){                arr[j][0] = scan.nextInt();                arr[j][1] = scan.nextInt();            }            dp(arr,num,target);        }    }}

这个就是完全背包了。想了半天,解空间还是想不出来。

然后看了背包九讲里面的二维费用和网上的解题报告。

这个解空间,哎其实仔细想想还是能想到的。被完全背包固定住了思维。。。