1. 程式人生 > 其它 >P1048 [NOIP2005 普及組] 採藥

P1048 [NOIP2005 普及組] 採藥

題目連結 https://www.luogu.com.cn/problem/P1048

本來想找一個揹包的題目試一下,我也真是沒想到它這麼水.....

這跟01揹包不能說是類似,只能說是一模一樣。換一個變數名稱的事兒。。。。。


放AC程式碼

二維:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int T,M;
 6     int t[110],v[110],dp[110][1010];
 7     cin>>T>>M;
 8     for(int i=1;i<=M;i++)
9 cin>>t[i]>>v[i]; 10 for(int i=1;i<=M;i++) 11 { 12 for(int j=0;j<=T;j++) 13 { 14 if(j<t[i]) dp[i][j]=dp[i-1][j]; 15 else dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i]]+v[i]); 16 } 17 } 18 cout<<dp[M][T]; 19 return
0; 20 }

一維:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int T,M;
 4 int t[110],v[110],dp[1010];
 5 int main()
 6 {
 7     cin>>T>>M;
 8     for(int i=1;i<=M;i++)
 9         cin>>t[i]>>v[i];
10     for(int i=1;i<=M;i++)
11     {
12         for(int j=T;j>=0;j--)
13 { 14 if(j>=t[i]) 15 dp[j]=max(dp[j],dp[j-t[i]]+v[i]); 16 } 17 } 18 cout<<dp[T]; 19 return 0; 20 }