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