国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hdu 2159 FATE( 二維完全背包)

2019-11-11 04:00:20
字體:
來源:轉載
供稿:網友

        二維完全背包,第二層跟第三層的要順序循環;(0-1背包逆序循環);狀態可理解為,在背包屬性為 {m(忍耐度), s(殺怪個數)} 里最多能得到的經驗值,之前的背包犧牲體積,這個背包犧牲忍耐度跟個數

       狀態轉移方程為:  dp[i][j]=max ( dp[i][j],dp[ i-cost[k] ]+w[i]]:消耗i忍耐力殺j個怪獲得的經驗值

FATE

Time Limit: 2000/1000 MS (java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12784    Accepted Submission(s): 6048PRoblem Description最近xhd正在玩一款叫做FATE的游戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來升完這最后一級。現在的問題是,xhd升掉最后一級還需n的經驗值,xhd還留有m的忍耐度,每殺一個怪xhd會得到相應的經驗,并減掉相應的忍耐度。當忍耐度降到0或者0以下時,xhd就不會玩這游戲。xhd還說了他最多只殺s只怪。請問他能升掉這最后一級嗎? Input輸入數據有多組,對于每組數據第一行輸入n,m,k,s(0 < n,m,k,s < 100)四個正整數。分別表示還需的經驗值,保留的忍耐度,怪的種數和最多的殺怪數。接下來輸入k行數據。每行數據輸入兩個正整數a,b(0 < a,b < 20);分別表示殺掉一只這種怪xhd會得到的經驗值和會減掉的忍耐度。(每種怪都有無數個) Output輸出升完這級還能保留的最大忍耐度,如果無法升完這級輸出-1。 Sample Input
10 10 1 101 110 10 1 91 19 10 2 101 12 2 Sample Output
0-11 AuthorXhd
#include<iostream>using namespace std;int main(){	//0-1背包問題背包為 忍耐度  cost 怪消耗的忍耐力 w為得到的經驗值   int r,jin,n,maxn;   while(cin>>jin>>r>>n>>maxn)   {   	 int cost[205],w[205],i,j,k,x,y;   	 int dp[205][205];//dp[i][j]=t代表消耗i忍耐力殺j個怪獲得的經驗值    	 for(i=0;i<205;i++)   	   for(j=0;j<205;j++)   	   dp[i][j]=0;	 for(i=0;i<n;i++)   	    cin>>w[i]>>cost[i];   	 for(i=0;i<n;i++)//怪的種類   	    for(j=cost[i];j<=r;j++)//耐力		   for(k=1;k<=maxn;k++) //怪的個數 		   dp[j][k]=max(dp[j][k],dp[j-cost[i]][k-1]+w[i]);//注意為k-1 	int flag=0;	for(i=0;i<=r;i++)//注意掃的時候 外層循環為忍耐度,內層循環為殺怪個數,因為題目要求出剩余忍耐度最大,沒有約束殺怪個數,一旦找到經驗加滿的即為最優解;   {         if(flag==1) 	       break;	   for(j=0;j<=maxn;j++)	   {	   	  if(dp[i][j]>=jin)	   	  {	   	  	x=i; flag=1;break;	      }	   }	}	if(flag==0) 	  cout<<-1<<endl;	else	  cout<<r-x<<endl;	   }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 满洲里市| 珠海市| 卢湾区| 大丰市| 藁城市| 孙吴县| 上思县| 普陀区| 佛冈县| 平遥县| 家居| 波密县| 滁州市| 平果县| 石楼县| 芦溪县| 上蔡县| 蓬莱市| 光泽县| 乌审旗| 裕民县| 沂水县| 古交市| 当雄县| 九江市| 蓝山县| 子长县| 新龙县| 唐山市| 辽源市| 克什克腾旗| 靖江市| 乡宁县| 伊春市| 邯郸市| 宁明县| 军事| 山东省| 长海县| 周口市| 从江县|