作业
jzoj 1986
解题思路:
‘光光’在暑假有很多作业,但他不能全部做完,他只有一定的时间,某一项作业没做完(有一点没做完也算),他就会有一个不开心值,现在问不开心值最小是多少
输入样例
5
3
2 6
1 3
4 7
输出样例
6
数据范围
100%的数据中, k<=100000, ti<=10000, pi<=10000;
30%的数据中, n<=20;
100%的数据中, n<=500。
解题思路:
我们可以先算出最大不开心值,然后用01背包算出最多可以消去多少不开心值,然后相减得出结果
代码:
#include<cstdio>
#define max(x,y) (x)>(y)?(x):(y)
using namespace std;
int k,n,t,s,num,f[100500];
int main()
{scanf("%d %d",&k,&n);for (int i=1;i<=n;++i){scanf("%d %d",&t,&s);num+=s;//不开心总值for (int j=k;j>=t;--j)//01背包f[j]=max(f[j],f[j-t]+s);//可消去的最大的不开心值}printf("%d",num-f[k]);//相减return 0;
}