日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【USACO Feb 2014】Cow Decathlon

發布時間:2024/7/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【USACO Feb 2014】Cow Decathlon 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

約翰有 N 頭奶牛,組成了一直隊伍參加全能比賽。比賽一共有 N 項,每頭奶牛必須參加一項比 賽,每項比賽也必須有一頭奶牛參加。任何一頭奶牛可以勝任任何一項比賽,但得分不一樣。如果第 i 頭奶牛參加第 j 項比賽,在比賽結束的時候,可以為團體總分增加 S i,j 。 比賽是按照順序依次進行的。除了上述獲得分數的方法之外,還有 B 種獎勵分。獲得獎勵的方法 是在前幾項比賽里獲得足夠的分數。具體來說,第 i 項獎勵會在第 K i 項比賽結束的時候檢查,如果 當時的總分大于或等于 P i ,奶牛們就可以立即獲得額外的 A i 分。如果有多項獎勵在同一時刻檢查, 奶牛可以自由安排檢查和加分的順序。請問約翰應該如何安排奶牛參加比賽,才能讓它們獲得最高的 分數??

輸入

? 第一行:兩個整數 N 和 B,1 ≤ N ≤ 20, 1 ≤ B ≤ 20 ? 第二行到第 B + 1 行:第 i + 1 行有三個整數 K i ,P i 和 A i ,1 ≤ K i ≤ N, 1 ≤ P i ≤ 40000, 1 ≤ A i ≤ 1000 ? 第 B + 2 行到第 B + N + 1 行:第 i + B + 1 行有 N 個整數,代表 S i,1 到 S i,N ,對每個 1 ≤ j ≤ N, 1 ≤ S i,j ≤ 1000

輸出

? 單個整數:表示奶牛們可以獲得的最大得分

樣例輸入

3 1 2 7 6 5 1 7 2 2 4 4 2 1

樣例輸出

17

提示

第一項比賽由第一頭奶牛參加,第二項比賽
由第三頭奶牛參加,第三項比賽由第二頭奶牛參加 題解: n<=20 ->狀壓DP 然后定義F[i]表示i狀態的奶牛,設now為i中1的數量,參加前now場比賽的最大得分 至于額外分這個東西,我把與比賽a有關的額外分都存在一個vector里 然后貪心 按pi從小到大排序 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 const int N=20; 8 struct node{ 9 int p,add; 10 }; 11 vector<node>q[N+5]; 12 int s[N+5][N+5],F[1<<N]; 13 bool cmp(const node &p,const node &q){return p.p<q.p;} 14 int getday(int x) 15 { 16 int cnt=0; 17 while(x) 18 { 19 cnt++; 20 x-=(x&(-x)); 21 } 22 return cnt; 23 } 24 int main() 25 { 26 int n,m,x,y,z; 27 scanf("%d%d",&n,&m); 28 for(int i=1;i<=m;i++) 29 { 30 scanf("%d%d%d",&x,&y,&z); 31 q[x].push_back((node){y,z}); 32 } 33 for(int i=1;i<=n;i++)sort(q[i].begin(),q[i].end(),cmp); 34 for(int i=1;i<=n;i++) 35 for(int j=1;j<=n;j++) 36 scanf("%d",&s[i][j]); 37 int mk=(1<<n)-1,now,tmp; 38 for(int i=0;i<mk;i++) 39 { 40 now=getday(i); 41 for(int j=1;j<=n;j++) 42 { 43 if((1<<(j-1))&i)continue; 44 tmp=F[i]+s[j][now+1]; 45 for(int k=0,sz=q[now+1].size();k<sz;k++) 46 if(tmp>=q[now+1][k].p)tmp+=q[now+1][k].add; 47 F[i|(1<<(j-1))]=max(F[i|(1<<(j-1))],tmp); 48 } 49 } 50 printf("%d",F[mk]); 51 return 0; 52 }

?

轉載于:https://www.cnblogs.com/Yuzao/p/7002489.html

總結

以上是生活随笔為你收集整理的【USACO Feb 2014】Cow Decathlon的全部內容,希望文章能夠幫你解決所遇到的問題。

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