卡车
卡車
題目大意:
有一個卡車向里面放東西(重量要么是一要么是二),價值不同,放的東西的價值之和最大是多少
原題:
解題思路:
看看數據就知道DP會MLE,所以要用排序來做,首先用價值除以重量,再排序,然后選擇最大的幾個(可以選幾個就選幾個),然后求和
代碼:
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int n,c[100005]; long long v,ans,t[100005],p[100005]; struct rec {int h;long long tt,pp,gg; }a[100005]; bool cmp(rec x,rec y) {return x.gg>y.gg||(x.gg==y.gg&&x.tt==2&&y.tt==1);//從小到大 } int main() {scanf("%d %lld",&n,&v);for (int i=1;i<=n;++i){scanf("%lld %lld",&t[i],&p[i]);a[i].tt=t[i];//重量a[i].pp=p[i];//價值a[i].gg=p[i]/t[i];//用于排序a[i].h=i;//記錄}sort(a+1,a+1+n,cmp);//排序for (int i=1;i<=n;++i)if (v>=a[i].tt){ans+=a[i].pp;//求和v-=a[i].tt;//減去c[a[i].h]=1;//記錄}printf("%lld\n",ans);//因為SSL的數據和題意不同,所以不用輸出編號 }總結
- 上一篇: 中国移动预计 6G 要到 2028~20
- 下一篇: 雷军微博发起小米14投票 8万名网友参与