题意:完全背包裸题
每件物品的cost就是它的value。
1.完全背包法
1 #include <iostream> 2 using namespace std; 3 4 const int maxn=11111; 5 int dp[maxn]; 6 7 int main(){ 8 int t; 9 cin>>t; 10 int value[4]={0,150,200,350}; 11 while(t--){ 12 int n; 13 cin>>n; 14 for(int i=1;i<=3;i++){ 15 for(int j=value[i];j<=n;j++){ 16 dp[j]=max(dp[j],dp[j-value[i]]+value[i]); 17 } 18 } 19 cout<<n-dp[n]<<endl; 20 } 21 return 0; 22 }
2.暴力优化法(转):
这种方法就是暴力出所有的不给小费的情况 最多就200个 所以不会超时
可以发现350以后,只要是50的倍数 就会付0小费 所以我们也可以把我下面复杂的暴力过程去掉//=.=厉害了!
1 #include<stdio.h> 2 int main(){ 3 int t,n; 4 int list[6]={0,50,100,0,0,50}; 5 scanf("%d",&t); 6 while(t--){ 7 scanf("%d",&n); 8 if(n<300) printf("%d\n",n%50+list[n/50]); 9 else printf("%d\n",n%50); 10 } 11 return 0; 12 }
时间: 2024-10-07 09:59:37