日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POJ 1042 Gone Fishing【枚举+贪心】

發布時間:2023/12/10 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1042 Gone Fishing【枚举+贪心】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意: 有 n 個池塘,只能從第一個池塘開始走,可以在每個池塘中釣魚,而且知道了每個池塘每五分鐘釣魚的數量都會下降一定額數值,且從池塘到下一個池塘之間都有一定的距離,知道了每個池塘走到下一個池塘的時間和每個池塘一開始能夠釣魚的數量,求在規定的時間內所能釣的最多的魚的數量。

分析: 枚舉以每個池塘為終點的情況,找到最大值。

????????? 有個注意的地方就是,沒枚舉一個終點,先把這段路的每個間隔所花時間去掉,這樣就可以每次貪心去找單位時間可以釣最多的魚了,而且可以保證貪心到最后可以找到最優解。

#include<cstdio> #include<cstring> #define clr(x)memset(x,0,sizeof(x)) struct node {int f; // 開頭 5 分鐘釣的魚數量 int d; // 每五分鐘減少的數量int dis; // 到下一個池塘的時間 }l[202]; int a[202]; // 保存每個池塘一開始可以釣的魚 int tim[202][2500]; int res[202]; int main() {int n,i,j,k,t,tot,tt,max;while(scanf("%d",&n),n){clr(a);clr(tim);clr(res);scanf("%d",&t);tot=t*12;for(i=0;i<n;i++)scanf("%d",&l[i].f);for(i=0;i<n;i++)scanf("%d",&l[i].d);for(i=0;i<n-1;i++)scanf("%d",&l[i].dis);for(i=0;i<n;i++){t=tot;for(j=0;j<i;j++)t-=l[j].dis;for(j=0;j<=i;j++)a[j]=l[j].f;for(j=0;j<t;j++){max=a[0];tt=0;for(k=0;k<=i;k++)if(a[k]>max){max=a[k];tt=k;}a[tt]-=l[tt].d;res[i]+=max;if(a[tt]<0)a[tt]=0;tim[i][tt]++;}}max=res[0];tt=0;for(i=1;i<n;i++)if(res[i]>max){max=res[i];tt=i;}for(i=0;i<n-1;i++)printf("%d, ",tim[tt][i]*5);printf("%d\n",tim[tt][i]*5);printf("Number of fish expected: %d\n\n",max);}return 0; }

?

?

轉載于:https://www.cnblogs.com/dream-wind/archive/2012/07/27/2612598.html

總結

以上是生活随笔為你收集整理的POJ 1042 Gone Fishing【枚举+贪心】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。