ZOJ 1013 Great Equipment
来源:互联网 发布:软件著作权加急 编辑:程序博客网 时间:2024/06/05 15:56
开始看以为是背包,想了好久,没办法,看了别人的解法才知道不是背包。。
最后就是输出的“Case:”,冒号后面竟然还要有个空格,题目也没说,发现ACM的题好多都这样,弄得WA,唉~~
#include <stdio.h>#include <iostream>#include <string.h>using namespace std;#define ITEM_CNT 3#define MAX_AMOUNT 500int w[ITEM_CNT];int s[ITEM_CNT];int d[ITEM_CNT];int c[ITEM_CNT];int nDefenseOfSet;int car[100][2];int dp[2][MAX_AMOUNT + 1][MAX_AMOUNT + 1];int CalcLargestDefense(int nCarCnt){ int index = 0; memset(dp, -1, 2 * (MAX_AMOUNT + 1) * (MAX_AMOUNT + 1) * sizeof(int)); for (int nCarIndex = 0; nCarIndex < nCarCnt; nCarIndex++) { for (int p = 0; p <= MAX_AMOUNT; p++) { if (p * w[0] > car[nCarIndex][0] || p * s[0] > car[nCarIndex][1]) { break; } for (int q = 0; q <= MAX_AMOUNT; q++) { int nWeightLeft = car[nCarIndex][0] - p * w[0] - q * w[1]; int nSizeLeft = car[nCarIndex][1] - p * s[0] - q * s[1]; if (nWeightLeft < 0 || nSizeLeft < 0) { break; } int m = nWeightLeft / w[2]; if ( m > nSizeLeft / s[2]) { m = nSizeLeft / s[2]; } if (nCarIndex == 0) { dp[1 - index][p][q] = m; } else { for (int x = p; x <= MAX_AMOUNT; x++) { for (int y = q; y <= MAX_AMOUNT; y++) { if (dp[index][x - p][y - q] >= 0) { if (m + dp[index][x- p][y - q] > dp[1 - index][x][y]) { dp[1 - index][x][y] = m + dp[index][x - p][y - q]; } } } } } } } index = 1 - index; } int ret = 0; for (int i = 0; i <= MAX_AMOUNT; i++) { for (int j = 0; j <= MAX_AMOUNT; j++) { int k = dp[index][i][j]; if (k >= 0) { //printf("(%d,%d)=%d\n", i, j, k); int t1 = i / c[0]; int t2 = j / c[1]; int t3 = k / c[2]; int min = (t1 < t2) ? t1 : t2; min = (t3 < min) ? t3 : min; int temp = nDefenseOfSet * min; temp += (i - min * c[0]) * d[0] + (j - min * c[1]) * d[1] + (k - min * c[2]) * d[2]; if (temp > ret) { ret = temp; } } } } return ret;}int main(){ int nCaseCnt = 1; while (1) { int n; cin >> n; cin.get(); if (n == 0) { break; } for (int i = 0; i < ITEM_CNT; i++) { cin >> w[i] >> s[i] >> d[i]; } for (int i = 0; i < ITEM_CNT; i++) { cin >> c[i]; } cin >> nDefenseOfSet; for (int i = 0; i < n; i++) { cin >> car[i][0] >> car[i][1]; } int nResult = CalcLargestDefense(n); if (nCaseCnt > 1) { cout << endl; } cout << "Case " << nCaseCnt++ << ": " << nResult << endl; } return 0;}
- ZOJ 1013 Great Equipment
- zoj 1013 Great Equipment
- ZOJ 1013 Great Equipment
- zoj 1013 Great Equipment
- ZOJ 1013 Great Equipment
- zoj 1013 Great Equipment
- ZOJ 1013 Great Equipment ---- DP
- ZOJ 1013 Great Equipment (DP)
- Great Equipment - ZOJ 1013 dp
- zju 1013 Great Equipment(DP)
- poj 1013 great equipment(背包,dp)
- zoj1013 great equipment
- ZOJ1013 Great Equipment
- zoj 2010 || poj 1380 Equipment Box
- ZOJ 3693 Happy Great BG
- ZOJ 3693 Happy Great BG
- zoj-3693-Happy Great BG
- ZOJ 2010 Equipment Box(POJ 1380)(暴力离散化)
- 算法整理
- Android G1的nand分区情况
- 关于jqGrid的multiselect,multiboxonly,multikey shift 多选
- cocos2d 2.x 实现精灵的会移动的遮罩
- zencart Notice: FAILED to send Email to all recipients. tool->send email
- ZOJ 1013 Great Equipment
- Java-改写equals方法必须遵循的准则
- QQ伤感日志_一点点揭开这撕心裂肺的伤
- How to work around Android’s 24 MB memory limit
- Latex 空格的设定
- Comet:基于 HTTP 长连接的“服务器推”技术
- srm 556 div1 500 LeftRightDigitsGame2(DP)
- gcc链接脚本
- cocos2d 2.x 实现精灵的会移动的遮罩