多校寒訓TaoTao要吃雞dp(未完成)
阿新 • • 發佈:2018-01-29
gpo 解釋 scanf div item 背包 -cp 並且 輸入
題目描述
Taotao的電腦帶不動絕地求生,所以taotao只能去玩pc版的荒野行動了, 和絕地求生一樣,遊戲人物本身可以攜帶一定重量m的物品,裝備背包 之後可以多攜帶h(h為0代表沒有裝備背包)重量的東西。玩了幾天 taotao發現了一個BUG,當裝備背包之後,如果可攜帶重量沒有滿,就 可以拿一個任意重的東西。(解釋看樣例)有一天taotao空降到了一個 奇怪的島上,島上有n件裝備,每個裝備都有重量Wi和威力值Vi,但taotao 不認識這些裝備,所以他來求助你,挑選威力最大的裝備,幫助他吃雞。
輸入描述:
本題有多組輸入(小於10),當n=0時結束輸入。
第一行輸入n,m,h。n,m,h為整數,並且0<=n,m,h<=100,
接下來n行,每行輸入第i個物品的物品的重量Wi和威力值Vi。0<=Wi,Vi<=100.
輸出描述:
輸出最大威力值,每組輸出一行。示例1
輸入
3 3 3 2 3 3 2 2 3 0
輸出
8
說明
可攜帶的總重量為6,當拿了前兩件裝備,此時容量為5/6,還可以再拿第三件物品。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <bits/stdc++.h> 4 using namespace std; 5 int main() 6 { 7 int dp[205],m,n,h,we[101],po[101]; 8 while(scanf("%d",&m)==1) 9 { 10 if(m==0)break; 11 else scanf("%d %d",&n,&h); 12 for(int i=0;i<m;i++) 13 scanf("%d %d",&we[i],&po[i]); 14 int V=n+h,ans=0; 15 for(int i=0;i<m;i++) 16 { 17 memset(dp,0,sizeof(dp)); 18 for(int k=0;k<m;k++) 19 { 20 if(k==i)continue; 21 for(int j=V;j>=we[k];j--) 22 dp[j]=max(dp[j],dp[j-we[k]]+po[k]);//printf("as"); 23 } 24 if(h) 25 ans=max(ans,dp[V-1]+po[i]); 26 else 27 ans=max(ans,dp[V]); 28 } 29 printf("%d\n",ans); 30 } 31 return 0; 32 }
多校寒訓TaoTao要吃雞dp(未完成)