【普及组模拟赛】作业
題目描述
光光上了高中,科目增多了。在長假里,光光的老師們都非常嚴厲,都給他布置了一定量的作業。假期里,光光一共有的時間是 k 小時。在長假前,老師們一共給光光布置了 n份作業,第 i 份作業需要的時間是 ti 小時。但是由于老師們互相不商量,因此光光有可能不能完成老師的作業。當可能不能完成老師的作業時,光光就事后去向老師說明,然后被老師批評一頓了事。對于一件作業,只有 2 種情況:完成或者不完成(快要完成也算不完成)。
如果沒完成,受到批評是天經地義的。但是,不同的作業對于光光來說,批評的力度是不同的。第 i 件作業如果沒完成,就要受到 pi 個單位的批評。多次這樣之后,光光想要在長假前就知道他至少會受到多少個單位的批評。你能幫助他嗎?
輸入
輸入文件的第一行只有一個數字 k。
第二行只有一個數字 n。
接下來 n 行,每行兩個數字,分別是 ti 和 pi,兩個數字之間用一個空格分開。
輸出
輸出文件 homework.out 僅包含一行,是一個數字,代表了光光最少受到的批評。
樣例輸入
5
3
2 6
1 3
4 7
樣例輸出
6
數據范圍限制
【數據范圍】
100%的數據中, k<=100000, ti<=10000, pi<=10000;
30%的數據中, n<=20;
100%的數據中, n<=500。
分析
這題其實就是一個0/1背包
先就總和,再求最大可以減少的批評,最后輸出它們的差。
程序:
uses math; var k,n,i,j:longint; tj:int64; f:array[0..100000]of int64; w,v:array[0..600]of longint; beginassign(input,'homework.in');reset(input);assign(output,'homework.out');rewrite(output);readln(k);readln(n);tj:=0;for i:=1 to n dobeginreadln(w[i],v[i]);tj:=tj+v[i];end;for i:=1 to n dofor j:=k downto w[i] dof[j]:=max(f[j],f[j-w[i]]+v[i]);write(tj-f[k]);close(input);close(output); end.轉載于:https://www.cnblogs.com/YYC-0304/p/9500006.html
總結
以上是生活随笔為你收集整理的【普及组模拟赛】作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【普及组模拟赛】家族
- 下一篇: 香烟