完美世界的两个编程题

```
/** * 背包问题  */ 
public static void DPweight() {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt(); 
    int costValue[] = new int[n];
    int weightVaule[] = new int[n];
    int i, j = 0; 
    for (i = 0; i<n; i++)
         costValue[i] = scanner.nextInt();
    for (i = 0; i<n ; i++)
          weightVaule[i] = scanner.nextInt(); 
    int t = scanner.nextInt(); 
    int[][] dp = new int[n + 1][t + 1];
     for (i = 0; i<n+1; i++) 
        for (j = 0; j<n+1; j++)
                 dp[i][j] = 0;
    for (i = 1; i<n+1; i++) {
       for (j = 1; j<n+1; j++)  {
          if (j >= weightVaule[i - 1])
                 dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weightVaule[i - 1]] + costValue[i - 1]); 
          else  dp[i][j] = dp[i - 1][j]; 
     }
 }
        System.out.print(dp[n][t]); 
} 
/** * 硬币问题  *  */
 public static void DPcharge() {
    Scanner scanner = new Scanner(System.in);
    String line = scanner.nextLine().trim(); 
    String[] array = line.split(",");
    int n = array.length; 
    int[] coinsValues = new int[n];
    for (int i = 0; i<n ; i++) {
        coinsValues[i] = Integer.parseInt(array[i]);  
    }
    int total = scanner.nextInt(); 
    int[] coinNum = new int[total + 1];//存储1...money找零最少需要的硬币的个数  
    int[] coinValue = new int[total + 1];//最后加入的硬币,方便后面输出是哪几个硬币  
    coinNum[0] = 0; 
       for (int i = 1; i <= total; i++) {
            int minNum = i;//i面值钱,需要最少硬币个数
            int usedMoney = 0;//这次找零,在原来的基础上需要的硬币
            for (int j = 0; j < n; j++) {
                if (i >= coinsValues[j])//找零的钱大于这个硬币的面值
                {
                    if (coinNum[i - coinsValues[j]] + 1 <= minNum && (i == coinsValues[j] || coinValue[i - coinsValues[j]] != 0))//所需硬币个数减少了
                    {
                        minNum = coinNum[i - coinsValues[j]] + 1;//更新
                        usedMoney = coinsValues[j];//更新
                    }
                }
            }
            coinNum[i] = minNum;
            coinValue[i] = usedMoney;
        }
        System.out.print(coinNum[total]);
 }

```

#完美世界##安卓工程师#
全部评论
背包我用这个方法只过80%,楼主能全过吗?是不是要用内存改进的一维数组?
点赞 回复 分享
发布于 2017-04-04 10:06
感谢分享 楼主都AC了吗
点赞 回复 分享
发布于 2017-03-31 15:14
有没有题目?我没有参加笔试,想看下完美的算法题
点赞 回复 分享
发布于 2017-03-30 16:54

相关推荐

07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务