标签:
链接:http://hihocoder.com/problemset/problem/1038?sid=469496
accept代码:
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int dp[501][100001]; 6 int need[501]; 7 int value[501]; 8 9 int main() 10 { 11 int num,amount; 12 cin>>num>>amount; 13 for(int i=1;i<=num;i++) 14 { 15 cin>>need[i]>>value[i]; 16 } 17 18 for(int j=1;j<=num;j++) 19 { 20 for(int i=0;i<=amount;i++) 21 { 22 if(i<need[j]) 23 { 24 dp[j][i]=dp[j-1][i]; 25 } 26 else 27 { 28 dp[j][i]=max(dp[j-1][i],(dp[j-1][i-need[j]]+value[j])); 29 } 30 } 31 } 32 33 cout<<dp[num][amount]<<endl; 34 return 0; 35 }
TLE代码:
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int dp[100001][501]; 6 int need[501]; 7 int value[501]; 8 9 int main() 10 { 11 int num,amount; 12 cin>>num>>amount; 13 for(int i=1;i<=num;i++) 14 { 15 cin>>need[i]>>value[i]; 16 } 17 18 for(int j=1;j<=num;j++) 19 { 20 for(int i=0;i<=amount;i++) 21 { 22 if(need[j]>i) 23 { 24 dp[i][j]=dp[i][j-1]; 25 } 26 else 27 { 28 dp[i][j]=max(dp[i][j-1],(dp[i-need[j]][j-1]+value[j])); 29 } 30 } 31 } 32 33 cout<<dp[amount][num]<<endl; 34 return 0; 35 }
两段代码的唯一区别就是二维数组定义的顺序:dp[物品数][背包容量]——dp[背包容量][物品数]。
为什么呢?
[hihocoder]01背包 accept 与 time limit exceed的代码比较
标签:
原文地址:http://www.cnblogs.com/lsr-flying/p/4739823.html