這個真的很難搞,排列組合也太難了
#include #include #include #include using namespace std;const int maxn = 1e6+10;
const int inf = 0x7fffffff;
int a[maxn];
int dp[maxn];
int max[maxn];//max(dp[i-1][k])就是上一組0~j-1的最大值
int main()
memset(dp,0,sizeof(dp));
memset(max,0,sizeof(max));//分成0組的全是0
for(int i = 1; i <= m; i++)
//這樣也就更新得到了分i組的max,下次分i+1組的時候就可以使用了
int dp[max];//儲存最後揹包最大能存多少
int value[max],weight[max],number[max];//分別存的是物品的價值,每乙個的重量以及數量
int bag;
void zeroonepack(int weight,int value )//01揹包
}void completepack(int weight,int value)//完全揹包}
void multiplepack(int weight,int value,int number)//多重揹包
else//否則就將多重揹包轉化為01揹包
zeroonepack(number*weight,number*value);
}}int main()
bank[max];
int n,t,s;
double q,temp;
int main()
memset(dp,0,sizeof(dp));dp[0]=1;
for(int i=1;i<=n;++i)
for(int j=s;j>=bank[i].m;--j)
dp[j]=max(dp[j],dp[j-bank[i].m]*bank[i].p);
int re=0;
for(int j=s;j>=0;--j)
else
if(dp[i]>re)
}printf("case %d:\n%d %d %d\n",tt,re,l,r);
if(tt!=t)
printf("\n");
}return 0;
}
#include #include #include #include #include using namespace std;const int max = 1002;
int k[max],dp[max];
int n,t;
int main()
, s[max],l=0;
int m,a,b,p,q;
void prime()
s[l++] = i;
} //s裡面儲存的是2-max的素數
}bool check_p(int x,int y)
bool check_f(int x,int y)
struct v
big;
int main()
}printf("%d %d\n",big.pp,big.qq);
}return 0;
}
動態規劃2
動態規劃是研究一類最優化問題的方法,在經濟 工程技術 企業管理 工農業生產及軍事等領域中都有廣泛的應用。近年來,在acm icpc中,使用動態規劃 或部分應用動態規劃思維 求解的題不僅常見,而且形式也多種多樣。而在與此相近的各類資訊學競賽中,應用動態規劃解題已經成為一種趨勢,這和動態規劃的優勢不無關...
動態規劃(2)
題目輸入格式 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2.r 1行 每行c個數,表示這個矩陣。輸出格式 僅一行 輸出1個整數,表示可以滑行的最大長度。樣例輸入 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 ...
動態規劃2
最長遞增子串行的問題 給定陣列arr,返回arr的最長遞增子串行長度。比如arr 最長遞增子串行為,返回arr的最長遞增子串行長度。比如arr 最長遞增子串行為所以返回這個子串行的長度為5。解決方案 arr 2 1 5 3 6 4 8 9 7 dp 1 1 2 2 3 3 4 5 4 dp i 表示...