今天做的算法题目如下:
#include<iostream> using namespace std; int main() { string wen1,wen2; cin>>wen1; cin>>wen2; int a[9],b[9]; for(int i=0;i<+8;i++) { a[i]=b[i]=0; } int a1=8,a2=8; for(int i=wen1.length();i>0;i--) { a[a1--]=wen1[i-1]-'0'; } for(int i=wen2.length();i>0;i--) { b[a2--]=wen2[i-1]-'0'; } for(int i=8;i>0;i--) { int bb=a[i]+b[i]; a[i]=bb%10; a[i-1]=a[i-1]+bb/10; } bool w=false; for(int i=0;i<=8;i++) { if(a[i]<10&&a[i]!=0) { w=true; } if(w) { cout<<a[i]; } } }
#include<iostream> using namespace std; int main() { int w[1005],v[1005],ok[1005][1005]; int a,b; cin>>a>>b; for(int i=1;i<=a;i++) { cin>>w[i]; cin>>v[i]; } for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { if(j<w[i]) { ok[i][j]=ok[i-1][j]; } else{ ok[i][j]=max(ok[i-1][j],ok[i-1][j-w[i]]+v[i]); } } } cout<<ok[a][b]; }
其中V(i-1,j)表示不装,V(i-1,j-w(i))+v(i) 表示装了第i个商品,背包容量减少w(i),但价值增加了v(i);
由此可以得出递推关系式:
- j<w(i) V(i,j)=V(i-1,j)
- j>=w(i) V(i,j)=max{V(i-1,j),V(i-1,j-w(i))+v(i)}