感想
这道题就是个完全背包,但是仍然荣获一次WA,有两个问题,首先是直接拿采药的源代码魔改的,所以数组范围忘了改,其次完全背包的内层循环要从cao[i].time到T,从零开始的话会有访问问题,这个要注意.
code
#include <algorithm>
#include <bits/stdc++.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
const int maxn = 1005;
struct node
{
int time;
int value;
};
node cao[10000+5];
int dp[100000+5];
int main()
{
#ifdef LOCAL
freopen("C:\\Users\\hsxny\\Desktop\\in.txt", "r", stdin);
#endif
int T,M;
scanf("%d%d",&T,&M);
for(int i=0;i<M;i++)
{
scanf("%d%d",&cao[i].time, &cao[i].value);
}
for(int i=0;i<M;i++)
{
for(int j=cao[i].time;j<=T;j++)
{
dp[j] = max(dp[j], dp[j-cao[i].time]+cao[i].value);
}
}
printf("%d\n",dp[T]);
return 0;
}