程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU OJ 2159 FATE [動態規劃]

HDU OJ 2159 FATE [動態規劃]

編輯:C++入門知識

思路:該題是一個 二為費用完全背包,要滿足兩個條件,忍耐度,殺怪數,求最大經驗。輸出達到 升級經驗時剩余的最大忍耐度。
代碼:
[cpp] 
#include<stdio.h> 
#include<string.h> 
struct hello 

    int x; 
    int y; 
}yi[500]; 
int ok[500][500]={0}; 
int main() 

    int a,b,c,n,m,k,v1,v2; 
    while(~scanf("%d%d%d%d",&n,&v1,&k,&v2)) 
    { 
        memset(ok,0,sizeof(ok)); 
        for(a=0;a<k;a++) 
            scanf("%d%d",&yi[a].y,&yi[a].x); 
        for(a=0;a<k;a++)  //三重循環 
        { 
            for(b=yi[a].x;b<=v1;b++) 
            { 
                for(c=1;c<=v2;c++) 
                    if(ok[b][c]<ok[b-yi[a].x][c-1]+yi[a].y)  //ok[b][c]代表忍耐度為b,殺怪數為c,所獲得的最大經驗。 
                        ok[b][c]=ok[b-yi[a].x][c-1]+yi[a].y; 
            } 
        }   www.2cto.com
        int loop=0,sum; 
        for(a=0;a<=v1;a++) 
        { 
            for(b=1;b<=v2;b++) 
            { 
                if(ok[a][b]>=n) 
                    {loop=1;sum=a;break;} 
            } 
            if(loop) break; 
        } 
        if(loop) 
            printf("%d\n",v1-sum); 
        else 
            printf("-1\n"); 
    } 

 作者:PIAOYI0208

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved