【背包DP】【2018.9.20普及组模拟】T3(WOJ 3975)保护羊村
生活随笔
收集整理的這篇文章主要介紹了
【背包DP】【2018.9.20普及组模拟】T3(WOJ 3975)保护羊村
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目(保護羊村):
【題目描述】 ?
偉大的Yyz 幫助羊羊們逃出了城堡,可Jack 自然不會善罷甘休。“我會詛咒你們的!”杰杰惱羞成怒地喊道?;氐窖虼搴?#xff0c;羊羊們發現羊村地震了??磥鞪ack的詛咒生效了。當務之急是修補因地震而坍塌的圍墻。
圍墻上有n 個圓形洞。第i 個洞的直徑是d_i 米,修復第i 個洞的時間是t_i 分鐘,一個洞開始修就必須修完。不妙的是,據可靠情報,灰太狼在c 分鐘后就將襲擊羊村,你的任務當然是使灰太狼來時剩余洞的總面積最小,以便羊羊們在灰太狼來時能夠更好的防御。
【輸入】
第1 行,一個正整數n,表示洞的總數。
第2~n+1 行,每行有2 個正整數d_i 和t_i(d_i,n_i≤10,000),d_i 表示 第i 個洞的直徑,t_i 表示修復第i 個洞的時間。
第n+2 行,一個正整數c(c≤1,000,000),表示灰太狼將在c 分鐘后到來。
【輸出】
輸出一行一個實數s,表示灰太狼來時剩余洞的最小面積。
π取3.1416,最后結果保留4 位小數。
【樣例輸入】
4
4 1
6 2
12 3
7 2
6
【樣例輸出】
28.2744
【數據范圍】
80%的數據滿足:1≤n≤15;
100%的數據滿足:1≤n≤100
分析:
顯然是一道背包DP(別問我為什么寫掛了)
把洞看成物體,時間看成體積,洞的面積看成價值,這,就是一道01背包求最大價值。
代碼:
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define N 120 int n,t[N],c; double dp[1000100],pi=3.1416,ans,ans1,d[N],w[N]; double area(double r){double ans=r*r*pi;return ans; } int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lf%d",&d[i],&t[i]);ans1+=area(d[i]/2.0); w[i]=area(d[i]/2.0);}scanf("%d",&c);for(int i=1;i<=n;i++)for(int j=c;j>=t[i];j--)dp[j]=max(dp[j],dp[j-t[i]]+w[i]);//標準背包模板printf("%.4lf",ans1-dp[c]);//總價值減最大價值return 0; }?
總結
以上是生活随笔為你收集整理的【背包DP】【2018.9.20普及组模拟】T3(WOJ 3975)保护羊村的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统一认证授权平台keycloak太牛了,
- 下一篇: CSS手绘图形