这两天做了一些简单背包问题,竟然5道里面卡了4道。

今晚终于在友人的帮助下过了一道,是个2b错误,贴出来晒晒,明天继续搞后面几道,看看错误到底在哪里,到时候再来更新。

(1)

#include<cstdio>#include<cstdlib>#include<cstring>usingnamespace std;#define max(x,y) ((x) > (y) ? (x) : (y))#define bagSize 200010#define bagNum 15int dp[bagSize], N, VOLUMN, value[bagNum], weight[bagNum], amount[bagNum];int DAY, interset;int main() { int i, j; int T; scanf("%d", &T); while (T--) { scanf("%d%d%d", &VOLUMN, &DAY, &N); VOLUMN /= 1000; interset = 0; memset(dp, 0, sizeof (dp)); for (i = 1; i <= N; i++) { scanf("%d%d", weight + i, value + i); weight[i] /= 1000; } while (DAY--) { for (int i = 1; i <= N; ++i) { //CompletePack(weight[i], value[i]);for (int j = weight[i]; j <= (VOLUMN + interset / 1000); ++j) { dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); } } interset += dp[VOLUMN + interset / 1000]; } printf("%d\n", VOLUMN * 1000 + interset); } return0;}
本高亮代码使用codeHl生成,查看详情

 

这个代码高亮怎么不灵了?哎

 

把VOLUMN换成VOLUMN * 1000就可以ac了

原因,题目说The value of a bond is always a multiple of $1 000,但是一开始给的总钱不一定是1000倍数啊,除1000乘1000,wa了一下午,伤不起啊。

 

(2)上午做了一场练习赛,大部分结对都是4、5题啊,我们4题,比赛12点结束,我们实现了线段树,然后交题,

最近的二b错误汇总 - 橙衣少年 - 跟着我勇敢地走下去

这就是提交情况,第一次ce了,然后加头文件,然后再交,接着交错代码了,发现之后重交 ,ac了,可惜比赛结束了。。。

 

(3)一道2分水题,三十几次提交终于ac,犯了各种错误

其中,最大的错误是:

while (scanf("%d%d", &n, &k),n&&k),n==k==0时退出 

改成while (scanf("%d%d", &n, &k),n||k) 

 

输入用%f错

输出用%lf错

 

精度不够错

。。。 。。。

我真的是沙茶