本文主要是介绍小米OJ #27石头收藏家,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
非常典型的一道01背包问题,太久没做,写出代码+找BUG花了一个多小时 : )
注意边界 注意边界。
还有小米OJ系统的评判,提交一直显示超时,遂去查看别人的提交,发现超时的提交都是有用到 getchar 或者 !=EOF。。
莫名超时,花了好多时间结果问题出在这里,很痛苦。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
int main()
{int w[61];int v[61];int dp[61][1001];int total;scanf("%d", &total);// input.int val, nums = 1;char s;while (~scanf("%d%c", &val, &s)){w[nums] = val;++nums;if (s != ' ')break;};nums = 1;while (~scanf("%d%c", &val, &s)){v[nums] = val;++nums;if (s != ' ')break;};// calint i, j;for (i = 1; i <= nums; i++){for (j = 1; j <= total; j++){if (j - w[i] >= 0)dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);elsedp[i][j] = dp[i - 1][j];}}printf("%d", dp[nums][total]);system("pause");return 0;
}
这篇关于小米OJ #27石头收藏家的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!