站点挂了,回档到四月,补档。
01背包
#include<iostream> #include<algorithm> using namespace std; int main(){ int N,V; cin>>N>>V; int w[N],c[N]; for(int i=0;i<N;i++){ cin>>w[i]; } for(int i=0;i<N;i++){ cin>>c[i]; } int dp[V]={0}; for(int i=1;i<=N;i++){ for(int v=V;v>=w[i];v--){ dp[v]=max(dp[v],dp[v-w[i]])+c[i]; } } int max = 0; for(int v=0;v<V;v++){ if(dp[v]>max){ max=p[v]; } } cout<<max<<endl; }
三角形最小路径和(LeetCode No.120)
从最底层向上处理,把最后两层合并为一层,一直向上到根节点。
class Solution { public int minimumTotal(List<List<Integer>> triangle) { int length = triangle.size(); int[] ns = new int[length]; if(length==1){return triangle.get(0).get(0);} for(int i=0;i<length;i++){ ns[i]=triangle.get(length-1).get(i); } for(int i=length-2;i>=0;i--){ for(int j=0;j<=i;j++){ ns[j]=Math.min(ns[j],ns[j+1])+triangle.get(i).get(j); } } return ns[0]; } }