CODE[VS]1014 装箱问题
2017-09-04 17:12
337 查看
题目:http://codevs.cn/problem/1014/
思路:依次将与容量最贴近的货物装入
题解:
思路:依次将与容量最贴近的货物装入
题解:
/* 1014 装箱问题 */ #include <stdio.h> #define DEBUG #define MAXN 30 int v, n; /* 容量,货物数 */ int goods[MAXN]; /* 货物体积 */ int all, remain; /* 已装总体积,剩余空间 */ /* 排序货物体积 */ void swap(int a, int b){ int t; t = goods[a]; goods[a] = goods[b]; goods[b] = t; } void sort(){ int i, j; for(i = 0; i < n; i++){ for(j = i; j < n; j++){ if(goods[i] < goods[j]){ swap(i, j); } } } } /* 贪心求解 */ void box(int depth){ int i; for(i = depth; i < n; i++){ /* 将货物放入箱子 */ all = all + goods[i]; /* 容量有剩余,继续装入货物 */ if(all <= v){ if(remain > (v - all)){ remain = v - all; } box(i + 1); } /* 将当前货物取出,放入其他货物 */ all = all - goods[i]; } } /* 主函数入口 */ int main(int argc, char *argv[]) { int i; #ifdef DEBUG FILE *fp; if(NULL == (fp = fopen("data.txt", "r"))){ return 1; } #endif /* 获取容量,货物数 */ #ifdef DEBUG fscanf(fp, "%d", &v); fscanf(fp, "%d", &n); #else scanf("%d", &v); scanf("%d", &n); #endif for(i = 0; i < n; i++){ #ifdef DEBUG fscanf(fp, "%d", &goods[i]); #else scanf("%d", &goods[i]); #endif } /* 排序货物体积 */ sort(goods); all = 0; remain = v; box(0); printf("%d", remain); #ifdef DEBUG fclose(fp); #endif return 0; }
相关文章推荐
- Code[vs]1014 装箱问题
- codevs1014 装箱问题(DP)
- [CODEVS1014]装箱问题
- codevs1014 装箱问题
- Codevs 1014(装箱问题)
- Codevs 1014 装箱问题
- code[vs] 1014 装箱问题(01背包)
- codevs1014 装箱问题
- CODE[VS] 1014 装箱问题
- codevs 1014 装箱问题
- codevs 装箱问题 1014
- Codevs 1014 装箱问题
- 【日常学习】【背包DP】codevs1014 装箱问题题解
- Codevs p1014 装箱问题
- codevs 1014 装箱问题 2001年NOIP全国联赛普及组
- codevs1014 装箱问题(DP)
- codevs 1464 装箱问题 2 x
- 【codevs1464】装箱问题2
- codevs 1464 装箱问题 2
- codevs天梯 装箱问题 水01背包