这是我刷水题的第四天。有n道水题可刷,做出第i道水题需要a[i]分钟。我最多能刷t分钟水题。我想让空闲时间越少越好,请问空闲时间最少几分钟?

【输入】

第一行两个整数n和t,第二行n个整数,第i个整数a[i]表示做第i道水题所需要的时间。

【输出】

一个整数,表示最少的空闲时间。

【样例输入】

4 50

12 23 34 45

【样例输出】

4

【输出说明】

50-12-34=4(分钟)

题解:

01背包改一改,直接上代码(为什么第13行要从后往前循环呢?你可以试一试)

 1 #include<iostream>  
 2 using namespace std;                                      代
 3 int n,t;                                                  码
 4 int a[1005];                                              保
 5 int dp[1005]={1};                                         护
 6 int main()                                                模
 7 {                                                         式
 8     cin>>n>>t;                                            已
 9     int i,j;                                              开
10     for(i=1;i<=n;i++)                                     启
11         cin>>a[i];                                        ,
12     for(i=1;i<=n;i++)                                     请
13         for(j=t;j>=1;j--)                                 勿
14             if(j>=a[i]&&dp[j-a[i]]==1)                    复
15                 dp[j]=1;                                  制
16     for(i=t;i>=0;i--)                                     ,
17         if(dp[i]==1)                                      欢
18             break;                                        迎
19     cout<<t-i;                                            参
20     return 0;                                             考
21 }