我有个新的思路(贪心)

P1616 疯狂的采药

不行,因为有剩余无法利用
by tallnut @ 2023-10-29 08:40:38


可以的话早就有人写了
by ragwort @ 2023-10-29 08:42:15


这是不行的,谢谢
by DJRicher @ 2023-10-29 08:57:44


@[DARKER2000](/user/996601) 不怕死就贪 ``` 10 3 8 9 4 4 3 3 ```
by zym0325 @ 2023-10-29 09:10:01


@[tallnut](/user/1037586) 什么叫“有剩余无法利用”
by zzx1228 @ 2023-10-29 19:39:44


@[DARKER2000](/user/996601) 参考@[zym0325](/user/804115) 大佬的数据
by tallnut @ 2023-10-29 20:46:50


@[DARKER2000](/user/996601) 不可以,局部最优无法达到整体最优,这个我试过了
by sususu_123 @ 2023-11-08 21:20:52


贪心是错误的,因为药材是没办法分割的
by youzimo @ 2023-12-18 20:23:58


贪心只能90分,我就是 代码: ``` #include<bits/stdc++.h> using namespace std; struct c { double jz=0; int sj=0,zj=0; }; int main() { long long n,m,n1,n2,n3=1,ans=0; cin>>n>>m; c a[m+1];int j2=m; for(int i=1;i<=m;i++) { cin>>n1>>n2; if(n2!=0&&n1!=0) {a[n3].sj=n1; a[n3].jz=1.0*n2/n1; a[n3].zj=n2; n3++; } } for(int i=1;i<=m;i++) { for(int j=i+1;j<=m;j++) { if(a[j].jz<a[j-1].jz) { swap(a[j].jz,a[j-1].jz); swap(a[j].zj,a[j-1].zj); swap(a[j].sj,a[j-1].sj); } while(j2>=1) { ans+=(n/a[j2].sj)*(a[j2].zj); n%=a[j2].sj; j2--; } cout<<ans; return 0; } ``` } cout<<ans; return 0; } ~~~
by qusia_MC @ 2024-01-28 07:25:08


|