日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

多重背包 (poj 1014)

發布時間:2025/7/25 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多重背包 (poj 1014) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 題目:Dividing

 題意:6種重量的的石頭,每個給定數量,用總重的一半去裝,問能否裝滿.

 

#include <iostream> #include <algorithm> #include <stdlib.h> #include <time.h> #include <cmath> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <queue> #include <stack> #include <set>#define c_false ios_base::sync_with_stdio(false); cin.tie(0) #define INF 0x3f3f3f3f #define INFL 0x3f3f3f3f3f3f3f3f #define zero_(x,y) memset(x , y , sizeof(x)) #define zero(x) memset(x , 0 , sizeof(x)) #define MAX(x) memset(x , 0x3f ,sizeof(x)) #define swa(x,y) {LL s;s=x;x=y;y=s;} using namespace std ; #define N 20005const double PI = acos(-1.0); typedef long long LL ; int dp[6*N]; int i = 0; int W,a[10]; void ZeroOnePack(int siz, int prise){for(int i = W;i>=siz;i--)dp[i] = max(dp[i], dp[i-siz] + prise); }void CompletePack(int siz, int prise){for(int i = siz; i<= W; i++)dp[i] = max(dp[i], dp[i-siz]+prise); }void MultiplePack(int siz, int prise, int num){if(siz*num >= W){CompletePack(siz,prise);return ;}int k = 1;while(k<num){ZeroOnePack(k*siz, k*prise);num-=k;k*=2;}ZeroOnePack(num*siz, num*prise); }bool cal(){if(W%2 == 0) W/=2;else return false;for(int i =1 ; i <= 6; i++ ){MultiplePack(i,i,a[i]);}if(dp[W] == W)return true;elsereturn false; }int main(void){//freopen("in.txt","r",stdin);while(cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]){zero(dp);W = 0;for(int j = 1;j <= 6;j++){W+=j*a[j];}if(a[6]== 0 &&a[1] == 0 &&a[2] == 0&& a[3] == 0&& a[4] ==0&& a[5] ==0)break;printf("Collection #%d:\n",++i);if(cal())puts("Can be divided.\n");elseputs("Can't be divided.\n");}return 0; }

?

轉載于:https://www.cnblogs.com/yoyo-sincerely/p/5291614.html

總結

以上是生活随笔為你收集整理的多重背包 (poj 1014)的全部內容,希望文章能夠幫你解決所遇到的問題。

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