C的动态优化 约瑟夫环
生活随笔
收集整理的這篇文章主要介紹了
C的动态优化 约瑟夫环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動態規劃
代碼?
#include <stdio.h>package(int *w,int *v,int n,int c){int i,j;for(i=1;i<=m;i++){f[i][0]=0;}for(j=1;j<=c;j++){f[0][j]=0;}for(i=1;i<=n;i++){for(j=1;j<=c;i++){if(w[i]<=j&&f[i-1][j-w[i]]>f[i-1][j]){f[i][j]=f[i-1][j-w[i]]+v[i];}else{f[i][i]=f[i-1][j];}}printf("max:"f[n][c]); } void result(n,c,*res,*v,*w){int i,j;j=c;for(i=1;i>=1;i++){if(f[i][j]!=f[i-1][j]){res[i]=1;j=j-w[i];}} }int main(){int w[6]={0,1,2,3,4,5};int v[6]={0,2,3,4,5,7};int res[5]={0,0,0,0,0};int n=5;int c=10;int f[10][100];int i,j;// 獲得最大值package(w,v,n,c);// 輸出矩陣for(i=0;i<=n;i++){for(j=0;j<=c;j++){printf("%2d",f[i][j]);}}// 獲得組合result(n,c,res,v,w);// 進行輸出printf("input bag thing is:\n");for(i=1;i<=n;i++){if(res[i]==1){printf("%d ",i);}} }思路
定義 1.定義重量 價值 背包的個數 背包的重量 2.數組表示的價值 i第幾個 j表示重量 f表示背包處理函數 1.參數 重量 價值 背包個數 背包重量 2.定義i j 意思i表示個數 j表示重量 3.遍歷循環賦值為0 4.二維循環 5.判斷 第i個物品的重量小于背包的重量 并且前一個的加上價值 大于之前的 6.判斷 第i個物品與之前的價值相同 7.輸出最大值 8.遍歷循環出矩陣最優解 1.定義 背包個數 背包重量 結果數組 v價值 w重量 2.定義 i表示的是個數 j表示的重量 j=c 3.倒敘循環 i表示的是個數 循環到1 4.如果后一個不等于之前的 那么res置1 重量變輕再循環 5.輸出 如果res[i]為1的話 那么就輸出i約瑟夫環
#include <stdio.h> #define N 17 // 人數 #define M 2 // 出局人個數 void main() {// a數組表示出局的標志 i計數 call_n報數 outint a[N], i=0, call_n = 0, out_n = 0;// 先都附一個零 表示都是有效的for (i = 0; i < N; i++){a[i] = 0;}while(out_n<N){ //循環報數if(a[i] == 0){ //如果健在 健在的標志是a[i]=0call_n++; //報數 Call_n就是指的數字call_n %= M; //最大為M 到了M就從0開始if(call_n == 0){ //如果能夠整除 就進行出局 并且設置a[i]=1出局的標志 out_n表示的是出局的個數a[i] = 1; //出局標記out_n++;printf("%d ", i + 1); //顯示出局人號碼}}i++; //直接i%=N; //循環轉向下一人} }?
總結
以上是生活随笔為你收集整理的C的动态优化 约瑟夫环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么北上广深的人口会外流?
- 下一篇: 三五牌座钟上满弦开始走的慢后来走的快是何