1. 程式人生 > >多校寒訓TaoTao要吃雞dp(未完成)

多校寒訓TaoTao要吃雞dp(未完成)

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(未完成)