这是我刷水题的第四天。有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 }