首页 > 其他分享 >HDOJ2111 Saving HDU(背包问题)

HDOJ2111 Saving HDU(背包问题)

时间:2023-02-20 11:01:04浏览次数:46  
标签:HDU Saving scanner int mi ++ HDOJ2111 static pi


题目链接:​​Saving HDU​


这题是个背包问题,首先按照单价排序,然后,装的下就装,装不下就分割。



import java.util.Scanner;

//背包问题
public class Main{
private static Scanner scanner;
private static int pi[];
private static int mi[];

public static void main(String[] args) {
scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int v = scanner.nextInt();// 容量
if (v == 0) {
break;
}
int n = scanner.nextInt();// 宝贝种类
pi = new int[n];// 单价
mi = new int[n];// 体积
for (int i = 0; i < n; i++) {
pi[i] = scanner.nextInt();
mi[i] = scanner.nextInt();
}
// 按照单价排序
sort();
// for (int i = 0; i < n; i++) {
// System.out.println(pi[i]+","+mi[i]);
// }
int sum = 0;// 总价值
for (int i = 0; i < n; i++) {
if (mi[i] >= v) {// 来到这里就一定可以装满
sum += v * pi[i];
break;
} else {
sum += pi[i] * mi[i];
v -= mi[i];
// v重新表示为:背包剩余容量
}
}
System.out.println(sum);
}
}

private static void sort() {
for (int i = 0; i < pi.length - 1; i++) {
for (int j = i + 1; j < pi.length; j++) {
if (pi[i] < pi[j]) {
int temp = pi[i];
pi[i] = pi[j];
pi[j] = temp;

temp = mi[i];
mi[i] = mi[j];
mi[j] = temp;
}
}
}
}
}



标签:HDU,Saving,scanner,int,mi,++,HDOJ2111,static,pi
From: https://blog.51cto.com/u_15741949/6067979

相关文章

  • Bone Collector HDU - 2602【 01 背包 】
    BoneCollector HDU-2602 &:自己的动态规划好差的,算法也跟不上,真是处处碰壁。于是找点简单的题看看,散散心。背包是比较典型的题了,看了好一会的背包九讲,对比着来学......
  • 畅通工程续(HDU 1874)(简单最短路)
    某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的......
  • dp HDU - 5074
    按题意推表达式#include<cstdio>#include<cstring>#definemax(a,b)(a)>(b)?(a):(b)intdp[105][105],num[105][105],a[105];intmain(){intt;sca......
  • C - Cake HDU - 1722 (数学)
    题意:就是一个蛋糕,被分成n或者m份。问最少动几刀。看一下这个图,就知道公式了,n+m-gcd(n,m);#include<cstdio>#include<iostream>usingnamespacestd;#definelllon......
  • C - Cake HDU - 1722 (数学)
    题意:就是一个蛋糕,被分成n或者m份。问最少动几刀。看一下这个图,就知道公式了,n+m-gcd(n,m);#include<cstdio>#include<iostream>usingnamespacestd;#definelllon......
  • HDU 4507 (数位dp)
    HDU4507(数位dp)题意一个数满足以下三个条件之一,则被认为与7有关。1、整数中某一位是7;2、整数的每一位加起来的和是7的整数倍;3、这个整数是7的整数倍;求区间[L,R]内......
  • HDU 3709 数位dp
    HDU3709(数位dp)题意求区间[L,R]内满足以下性质的数:选定该数的一个位置,左右两边的力矩相等,如4139,选取'3'这位,左边4×2+1×1=9×1.思路一开始想着枚举每个点来做,......
  • C - Cake HDU - 1722 (数学)
    题意:就是一个蛋糕,被分成n或者m份。问最少动几刀。看一下这个图,就知道公式了,n+m-gcd(n,m);#include<cstdio>#include<iostream>usingnamespacestd;#definelllon......
  • HDU 4389 数位dp
    HDU4389(数位dp)题意求一个区间内[L,R]内有多少个数满足:它的数位和能整除它本身。思路按照一般数位dp的套路,多出来的参数无非就是数位和以及这个数本身,但如果直接这......
  • HDU 1024 Max Sum Plus Plus
    题目大意:给定一个长度为\(n\)数组,求划分成\(m\)段不相交区间的子段和最大值得问题那么需要考虑得就是对于第i个数字,是否选中它在m个区间中,以及如果选中它那么它在第几个......